sync: Warn when a remote's export is not updated to the current tree because export tracking is not configured.

Only display the warning when the current branch has a tree that is not
the same as the tree in the export.

Note that it doesn't check to see if the current tree is
in incompleteExportedTreeish; it might be worth checking that and reminding
the user about an incomplete export, but when export tracking is not
configured, they are probably not in the right clone of the repository to
resolve the incomplete export.

This commit was sponsored by Ethan Aubin.
This commit is contained in:
Joey Hess 2018-09-27 15:35:46 -04:00
parent f35ba87ea6
commit 9adee3f2fb
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
5 changed files with 38 additions and 7 deletions

View file

@ -64,6 +64,7 @@ exportToRemotes rs = do
Annex.changeState $ \st -> st { Annex.errcounter = 0 }
start <- liftIO getCurrentTime
void $ Command.Sync.seekExportContent rs
=<< join Command.Sync.getCurrBranch
-- Look at command error counter to see if the export
-- didn't work.
failed <- (> 0) <$> Annex.getState Annex.errcounter

View file

@ -1,3 +1,10 @@
git-annex (6.20180927) UNRELEASED; urgency=medium
* sync: Warn when a remote's export is not updated to the current
tree because export tracking is not configured.
-- Joey Hess <id@joeyh.name> Thu, 27 Sep 2018 15:27:20 -0400
git-annex (6.20180926) upstream; urgency=medium
[ Joey Hess ]

View file

@ -189,7 +189,7 @@ seek o = allowConcurrentOutput $ do
whenM shouldsynccontent $ do
syncedcontent <- seekSyncContent o dataremotes
exportedcontent <- seekExportContent exportremotes
exportedcontent <- withbranch $ seekExportContent exportremotes
-- Transferring content can take a while,
-- and other changes can be pushed to the
-- git-annex branch on the remotes in the
@ -680,22 +680,39 @@ syncFile ebloom rs af k = onlyActionOn' k $ do
-
- Returns True if any file transfers were made.
-}
seekExportContent :: [Remote] -> Annex Bool
seekExportContent rs = or <$> forM rs go
seekExportContent :: [Remote] -> CurrBranch -> Annex Bool
seekExportContent rs (currbranch, _) = or <$> forM rs go
where
go r = withExclusiveLock (gitAnnexExportLock (Remote.uuid r)) $ do
db <- Export.openDb (Remote.uuid r)
ea <- Remote.exportActions r
exported <- case remoteAnnexExportTracking (Remote.gitconfig r) of
Nothing -> getExport (Remote.uuid r)
Nothing -> nontracking r
Just b -> do
mcur <- inRepo $ Git.Ref.tree b
case mcur of
Nothing -> getExport (Remote.uuid r)
Nothing -> nontracking r
Just cur -> do
Command.Export.changeExport r ea db cur
return [Exported cur []]
Export.closeDb db `after` fillexport r ea db exported
nontracking r = do
exported <- getExport (Remote.uuid r)
maybe noop (warnnontracking r exported) currbranch
return exported
warnnontracking r exported currb = inRepo (Git.Ref.tree currb) >>= \case
Just currt | not (any (\ex -> exportedTreeish ex == currt) exported) ->
showLongNote $ unwords
[ "Not updating export to " ++ Remote.name r
, "to reflect changes to the tree, because export"
, "tracking is not enabled. "
, "(Use git-annex export's --tracking option"
, "to enable it.)"
]
_ -> noop
fillexport _ _ _ [] = return False
fillexport r ea db (Exported { exportedTreeish = t }:[]) =

View file

@ -43,7 +43,7 @@ versions of files stored in them. If a special remote is set up to do
that, it can be used as a key/value store and the limitations in the above
paragraph do not appy. Note that dropping content from such a remote is
not supported. See individual special remotes' documentation for
details of how to enable such versioning.
details of how to enable such versioning.
# OPTIONS
@ -55,7 +55,11 @@ details of how to enable such versioning.
This makes the export track changes that are committed to
the branch. `git annex sync --content` and the git-annex assistant
will update exports when it commits to the branch they are tracking.
will update exports with commits made to the branch.
This is a local configuration setting, similar to a git remote's tracking
branch. You'll need to run `git annex export --tracking` in each
repository you want the export to track.
* `--fast`

View file

@ -17,3 +17,5 @@ have a tracking branch, to help the user understand why it's not syncing
their recent changes to it.
--[[Joey]]
> [[done]] --[[Joey]]