nonebot / nb-cli

NoneBot2 脚手架 / CLI for NoneBot2
https://cli.nonebot.dev
MIT License
156 stars 17 forks source link

Bug: 重载忽略文件夹不支持相对路径 #122

Closed fu050409 closed 6 months ago

fu050409 commented 6 months ago
root@hcss-ecs-ccfa:~# nb run --help
Usage: nb run [OPTIONS]

  Run the bot in current folder.

Options:
  -f, --file TEXT         Exist entry file of your bot.  [default: bot.py]
  -r, --reload            Reload the bot when file changed.
  --reload-dirs TEXT      Paths to watch for changes.
  --reload-includes TEXT  Files to watch for changes.
  --reload-excludes TEXT  Files to ignore for changes.
  --reload-delay FLOAT    Delay time for reloading in seconds.  [default: 0.5]
  -h, --help              Show this message and exit.

重载的时候有特定的文件夹不需要被监视重载,但是看起来nb-cil没有提供对整个文件夹忽略的功能,而只能指定忽略特定文件。

能否在重载时加入忽略监视的文件夹?例如:

nb run --reload --reload-excludes-dirs packages/
yanyongyu commented 6 months ago

有的哦,你可以使用文件夹路径或者使用glob pattern,请确认你输入的文件夹路径是否正确 https://github.com/nonebot/nb-cli/blob/74c8c2b2f81c99affb76bbddb31b4f3b66719048/nb_cli/handlers/reloader.py#L29-L45

fu050409 commented 6 months ago

我尝试了以下操作:

PS D:\Projects\noctisdice> nb run --reload --reload-excludes packages/

Nonebot 正常启动了,随后我对packages/ndice/src/ndice.py进行了修改,我却得到了:

Watchfiles 在 "packages\ndice\src\ndice.py" 中发现变化. 正在重新加载...
04-01 16:22:51 [INFO] uvicorn | Shutting down
04-01 16:22:51 [INFO] uvicorn | Waiting for application shutdown.
04-01 16:22:51 [INFO] uvicorn | Application shutdown complete.
04-01 16:22:51 [INFO] uvicorn | Finished server process [7416]
fu050409 commented 6 months ago

我找到问题所在了,nb-cli看起来不支持相对路径进行忽略,我将指令修改为nb run --reload --reload-excludes D:/projects/noctisdice/packages后它便运行正常了。

感谢你的耐心。

yanyongyu commented 6 months ago

相对路径也是相对当前工作目录,你可以看看你的工作目录对不对

fu050409 commented 6 months ago

我尝试了以下操作:

PS D:\Projects\noctisdice> nb run --reload --reload-excludes packages/

Watchfiles 在 "packages\ndice\src\ndice.py" 中发现变化. 正在重新加载...

我找到问题所在了,nb-cli看起来不支持相对路径进行忽略,我将指令修改为nb run --reload --reload-excludes D:/projects/noctisdice/packages后它便运行正常了。

相对路径也是相对当前工作目录,你可以看看你的工作目录对不对

我的工作目录是D:\Projects\noctisdice,而修改的文件是packages\ndice\src\ndice.py,忽略监听--reload-excludes的文件夹是packages/,而我修改后的忽略监听的路径是D:/projects/noctisdice/packages

看起来我的工作目录没有问题?

fu050409 commented 6 months ago
>>> Path.cwd().joinpath("packages") in Path.cwd().joinpath("packages", "coc").parents
True
>>> Path("packages") in Path.cwd().joinpath("packages", "coc").parents                
False
>>>

https://github.com/nonebot/nb-cli/blob/74c8c2b2f81c99affb76bbddb31b4f3b66719048/nb_cli/handlers/reloader.py#L49-L52

你这里使用的是exclude_dir in path.parents,而在

https://github.com/nonebot/nb-cli/blob/74c8c2b2f81c99affb76bbddb31b4f3b66719048/nb_cli/handlers/reloader.py#L33-L44

里面你直接进行了p = Path(e),随后执行了self.exclude_dirs.append(p),是否应该使用Path(e).resolve()替代Path(e)

>>> Path("packages").resolve() in Path.cwd().joinpath("packages", "coc").parents 
True
yanyongyu commented 6 months ago

看上去是漏了resolve