mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
This pull request introduces a significant enhancement to the `gf run` command, focusing on improving the directory watching mechanism for hot-reload functionality. The main improvements include a more intelligent and efficient algorithm for determining which directories to watch (recursively or non-recursively), support for custom ignore patterns, and a comprehensive set of unit tests to ensure correctness. Additionally, some outdated database drivers were removed from the dependencies. **Key changes:** ### Directory Watching Improvements * Refactored the directory watching logic in `cmd_run.go` to use a DFS-based algorithm that minimizes the number of watched directories while respecting ignored patterns. Directories and their descendants without ignored subdirectories are watched recursively; otherwise, non-recursive watches are set, and valid children are recursed into. This results in more efficient and accurate hot-reload behavior. (`cmd/gf/internal/cmd/cmd_run.go`) * Added support for custom ignore patterns via the new `-i`/`--ignorePatterns` flag, allowing users to specify directories to be excluded from watching. Default ignored patterns include `node_modules`, `vendor`, hidden directories, and directories starting with an underscore. (`cmd/gf/internal/cmd/cmd_run.go`) [[1]](diffhunk://#diff-406a97355fde87f9a6fc118877430c2720632eb94eb2aaba72025571e5fe5146R97) [[2]](diffhunk://#diff-406a97355fde87f9a6fc118877430c2720632eb94eb2aaba72025571e5fe5146L61-R69) [[3]](diffhunk://#diff-406a97355fde87f9a6fc118877430c2720632eb94eb2aaba72025571e5fe5146L104-R132) * Improved parsing of comma-separated arguments for both watch paths and ignore patterns to support flexible CLI usage. (`cmd/gf/internal/cmd/cmd_run.go`) ### User Experience and Documentation * Updated help messages, usage examples, and documentation to reflect the new features and more intuitive CLI options for specifying watch paths and ignore patterns. (`cmd/gf/internal/cmd/cmd_run.go`) [[1]](diffhunk://#diff-406a97355fde87f9a6fc118877430c2720632eb94eb2aaba72025571e5fe5146L51-R58) [[2]](diffhunk://#diff-406a97355fde87f9a6fc118877430c2720632eb94eb2aaba72025571e5fe5146R85) ### Testing * Added a comprehensive unit test suite for the new `getWatchPaths` logic, covering various scenarios including custom ignore patterns, deeply nested structures, multiple roots, non-existent directories, and edge cases. (`cmd/gf/internal/cmd/cmd_z_unit_run_test.go`) ### Dependency Cleanup * Removed unused database driver dependencies from `go.mod` to streamline the project dependencies. (`cmd/gf/go.mod`) These changes collectively make the hot-reload feature more robust, configurable, and efficient, while ensuring maintainability through thorough testing. --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: houseme <housemecn@gmail.com>