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:
parent
f35ba87ea6
commit
9adee3f2fb
5 changed files with 38 additions and 7 deletions
|
@ -64,6 +64,7 @@ exportToRemotes rs = do
|
||||||
Annex.changeState $ \st -> st { Annex.errcounter = 0 }
|
Annex.changeState $ \st -> st { Annex.errcounter = 0 }
|
||||||
start <- liftIO getCurrentTime
|
start <- liftIO getCurrentTime
|
||||||
void $ Command.Sync.seekExportContent rs
|
void $ Command.Sync.seekExportContent rs
|
||||||
|
=<< join Command.Sync.getCurrBranch
|
||||||
-- Look at command error counter to see if the export
|
-- Look at command error counter to see if the export
|
||||||
-- didn't work.
|
-- didn't work.
|
||||||
failed <- (> 0) <$> Annex.getState Annex.errcounter
|
failed <- (> 0) <$> Annex.getState Annex.errcounter
|
||||||
|
|
|
@ -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
|
git-annex (6.20180926) upstream; urgency=medium
|
||||||
|
|
||||||
[ Joey Hess ]
|
[ Joey Hess ]
|
||||||
|
|
|
@ -189,7 +189,7 @@ seek o = allowConcurrentOutput $ do
|
||||||
|
|
||||||
whenM shouldsynccontent $ do
|
whenM shouldsynccontent $ do
|
||||||
syncedcontent <- seekSyncContent o dataremotes
|
syncedcontent <- seekSyncContent o dataremotes
|
||||||
exportedcontent <- seekExportContent exportremotes
|
exportedcontent <- withbranch $ seekExportContent exportremotes
|
||||||
-- Transferring content can take a while,
|
-- Transferring content can take a while,
|
||||||
-- and other changes can be pushed to the
|
-- and other changes can be pushed to the
|
||||||
-- git-annex branch on the remotes in 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.
|
- Returns True if any file transfers were made.
|
||||||
-}
|
-}
|
||||||
seekExportContent :: [Remote] -> Annex Bool
|
seekExportContent :: [Remote] -> CurrBranch -> Annex Bool
|
||||||
seekExportContent rs = or <$> forM rs go
|
seekExportContent rs (currbranch, _) = or <$> forM rs go
|
||||||
where
|
where
|
||||||
go r = withExclusiveLock (gitAnnexExportLock (Remote.uuid r)) $ do
|
go r = withExclusiveLock (gitAnnexExportLock (Remote.uuid r)) $ do
|
||||||
db <- Export.openDb (Remote.uuid r)
|
db <- Export.openDb (Remote.uuid r)
|
||||||
ea <- Remote.exportActions r
|
ea <- Remote.exportActions r
|
||||||
exported <- case remoteAnnexExportTracking (Remote.gitconfig r) of
|
exported <- case remoteAnnexExportTracking (Remote.gitconfig r) of
|
||||||
Nothing -> getExport (Remote.uuid r)
|
Nothing -> nontracking r
|
||||||
Just b -> do
|
Just b -> do
|
||||||
mcur <- inRepo $ Git.Ref.tree b
|
mcur <- inRepo $ Git.Ref.tree b
|
||||||
case mcur of
|
case mcur of
|
||||||
Nothing -> getExport (Remote.uuid r)
|
Nothing -> nontracking r
|
||||||
Just cur -> do
|
Just cur -> do
|
||||||
Command.Export.changeExport r ea db cur
|
Command.Export.changeExport r ea db cur
|
||||||
return [Exported cur []]
|
return [Exported cur []]
|
||||||
Export.closeDb db `after` fillexport r ea db exported
|
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 _ _ _ [] = return False
|
||||||
fillexport r ea db (Exported { exportedTreeish = t }:[]) =
|
fillexport r ea db (Exported { exportedTreeish = t }:[]) =
|
||||||
|
|
|
@ -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
|
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
|
paragraph do not appy. Note that dropping content from such a remote is
|
||||||
not supported. See individual special remotes' documentation for
|
not supported. See individual special remotes' documentation for
|
||||||
details of how to enable such versioning.
|
details of how to enable such versioning.
|
||||||
|
|
||||||
# OPTIONS
|
# OPTIONS
|
||||||
|
|
||||||
|
@ -55,7 +55,11 @@ details of how to enable such versioning.
|
||||||
|
|
||||||
This makes the export track changes that are committed to
|
This makes the export track changes that are committed to
|
||||||
the branch. `git annex sync --content` and the git-annex assistant
|
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`
|
* `--fast`
|
||||||
|
|
||||||
|
|
|
@ -17,3 +17,5 @@ have a tracking branch, to help the user understand why it's not syncing
|
||||||
their recent changes to it.
|
their recent changes to it.
|
||||||
|
|
||||||
--[[Joey]]
|
--[[Joey]]
|
||||||
|
|
||||||
|
> [[done]] --[[Joey]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue