lock to avoid more than one export to a remote at a time
This commit was sponsored by Jack Hill on Patreon.
This commit is contained in:
parent
af0958dd70
commit
486902389d
3 changed files with 11 additions and 2 deletions
|
@ -37,6 +37,7 @@ module Annex.Locations (
|
|||
gitAnnexFsckDbLock,
|
||||
gitAnnexFsckResultsLog,
|
||||
gitAnnexExportDbDir,
|
||||
gitAnnexExportLock,
|
||||
gitAnnexScheduleState,
|
||||
gitAnnexTransferDir,
|
||||
gitAnnexCredsDir,
|
||||
|
@ -300,6 +301,10 @@ gitAnnexExportDir u r = gitAnnexDir r </> "export" </> fromUUID u
|
|||
gitAnnexExportDbDir :: UUID -> Git.Repo -> FilePath
|
||||
gitAnnexExportDbDir u r = gitAnnexExportDir u r </> "db"
|
||||
|
||||
{- Lock file for export state for a special remote. -}
|
||||
gitAnnexExportLock :: UUID -> Git.Repo -> FilePath
|
||||
gitAnnexExportLock u r = gitAnnexExportDir u r ++ ".lck"
|
||||
|
||||
{- .git/annex/schedulestate is used to store information about when
|
||||
- scheduled jobs were last run. -}
|
||||
gitAnnexScheduleState :: Git.Repo -> FilePath
|
||||
|
|
|
@ -23,6 +23,7 @@ import Types.Remote
|
|||
import Types.Export
|
||||
import Annex.Content
|
||||
import Annex.CatFile
|
||||
import Annex.LockFile
|
||||
import Logs.Location
|
||||
import Logs.Export
|
||||
import Database.Export
|
||||
|
@ -85,7 +86,10 @@ seek o = do
|
|||
r <- getParsed (exportRemote o)
|
||||
unlessM (isExportSupported r) $
|
||||
giveup "That remote does not support exports."
|
||||
withExclusiveLock (gitAnnexExportLock (uuid r)) (seek' o r)
|
||||
|
||||
seek' :: ExportOptions -> Remote -> CommandSeek
|
||||
seek' o r = do
|
||||
new <- fromMaybe (giveup "unknown tree") <$>
|
||||
-- Dereference the tree pointed to by the branch, commit,
|
||||
-- or tag.
|
||||
|
|
|
@ -26,11 +26,11 @@ Work is in progress. Todo list:
|
|||
export database is not populated. So, seems that the export database needs
|
||||
to get populated based on the export log in these cases.
|
||||
|
||||
This needs a (local) record of what treeish the (local) export db
|
||||
This needs a (local) record of what tree the (local) export db
|
||||
was last updated for, which is updated at the same time as the export log.
|
||||
One way to record that would be as a git ref.
|
||||
|
||||
When the export log contains a different treeish than the local
|
||||
When the export log contains a different tree than the local
|
||||
record, the export was updated in another repository, and so the
|
||||
export db needs to be updated.
|
||||
|
||||
|
|
Loading…
Reference in a new issue