assist: operate on all files in working tree by default

Consistency with sync and internal consistency is more important than
consistency with the assistant, which is not itself consistent about
what it does when run in a subdirectory.

Note that with -C, it will still commit staged changes to files outside
the directory. Like sync does. Presumably if the user is manually
staging things, then running this command, they intend to build up a
commit.

Sponsored-by: unqueued on Patreon
This commit is contained in:
Joey Hess 2023-05-19 14:47:05 -04:00
parent c4ad9b1446
commit 9ed59dab5b
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
3 changed files with 33 additions and 8 deletions

View file

@ -22,11 +22,13 @@ cmd = withAnnexOptions [jobsOption, backendOption] $
myseek :: Command.Sync.SyncOptions -> CommandSeek
myseek o = startConcurrency transferStages $ do
-- Run before prepMerge so it adds only files in the current
-- directory and below, not new files elsewhere in the working
-- tree.
-- Changes to top of repository, so when this is run in a
-- subdirectory, it will still default to adding files anywhere in
-- the working tree.
Command.Sync.prepMerge
Command.Add.seek Command.Add.AddOptions
{ Command.Add.addThese = []
{ Command.Add.addThese = Command.Sync.contentOfOption o
, Command.Add.batchOption = NoBatch
, Command.Add.updateOnly = False
, Command.Add.largeFilesOverride = Nothing
@ -37,5 +39,4 @@ myseek o = startConcurrency transferStages $ do
-- Flush added files to index so they will be committed.
Annex.Queue.flush
Command.Sync.prepMerge
Command.Sync.seek' o

View file

@ -13,11 +13,14 @@ and syncing with remotes. It's the simplest possible way to use git-annex
at the command line, since only this one command needs to be run on a
regular basis.
This command first adds any new files (in the current directory and
its children) to the repository, and commits those as well as any
modified files. Then it does the equivilant of running
This command first adds any new files to the repository, and commits those
as well as any modified files. Then it does the equivilant of running
[[git-annex-pull](1) followed by [[git-annex-push]](1).
This command operates on all files in the whole working tree,
even when ran in a subdirectory. To limit it to operating on files in a
subdirectory, use the `--content-of` option.
To block some files from being added to the repository, use `.gitignore`
files.
@ -31,6 +34,12 @@ files that it does not match will instead be added with `git add`.
Use this option to specify a commit message.
* `--content-of=path` `-C path`
Only add, pull, and push files in the given path.
This option can be repeated multiple times with different paths.
* Also all options supported by [[git-annex-pull]](1) and
[[git-annex-push]](1) can be used.

View file

@ -0,0 +1,15 @@
[[!comment format=mdwn
username="joey"
subject="""comment 12"""
date="2023-05-19T18:37:28Z"
content="""
I'm also not too happy with the inconsistency of assist committing all staged
changes and syncing all file contents, but only adding files in the cwd.
I suppose that consistency with the assistant doesn't really matter. The
assistant's behavior when ran in a subdirectory is surprising,
inconsistent, and undocumented.
So I'm going to change assist to add all files. Except when -C is used,
then only add files in the specified directory.
"""]]