mirror: Support --all (and --unused).
This commit is contained in:
		
					parent
					
						
							
								ba20e5a7f4
							
						
					
				
			
			
				commit
				
					
						079f463d51
					
				
			
		
					 5 changed files with 32 additions and 22 deletions
				
			
		| 
						 | 
					@ -102,10 +102,10 @@ handleDropsFrom locs rs reason fromhere key (Just afile) knownpresentremote = do
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dropl fs n = checkdrop fs n Nothing $ \numcopies ->
 | 
						dropl fs n = checkdrop fs n Nothing $ \numcopies ->
 | 
				
			||||||
		Command.Drop.startLocal afile numcopies key knownpresentremote
 | 
							Command.Drop.startLocal (Just afile) numcopies key knownpresentremote
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dropr fs r n  = checkdrop fs n (Just $ Remote.uuid r) $ \numcopies ->
 | 
						dropr fs r n  = checkdrop fs n (Just $ Remote.uuid r) $ \numcopies ->
 | 
				
			||||||
		Command.Drop.startRemote afile numcopies key r
 | 
							Command.Drop.startRemote (Just afile) numcopies key r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	safely a = either (const False) id <$> tryAnnex a
 | 
						safely a = either (const False) id <$> tryAnnex a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@ import Annex.Content
 | 
				
			||||||
import Config
 | 
					import Config
 | 
				
			||||||
import qualified Option
 | 
					import qualified Option
 | 
				
			||||||
import Annex.Wanted
 | 
					import Annex.Wanted
 | 
				
			||||||
 | 
					import Types.Key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def :: [Command]
 | 
					def :: [Command]
 | 
				
			||||||
def = [withOptions [fromOption] $ command "drop" paramPaths seek
 | 
					def = [withOptions [fromOption] $ command "drop" paramPaths seek
 | 
				
			||||||
| 
						 | 
					@ -34,21 +35,21 @@ start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
 | 
				
			||||||
start from file (key, _) = checkDropAuto from file key $ \numcopies ->
 | 
					start from file (key, _) = checkDropAuto from file key $ \numcopies ->
 | 
				
			||||||
	stopUnless (checkAuto $ wantDrop False (Remote.uuid <$> from) (Just file)) $
 | 
						stopUnless (checkAuto $ wantDrop False (Remote.uuid <$> from) (Just file)) $
 | 
				
			||||||
		case from of
 | 
							case from of
 | 
				
			||||||
			Nothing -> startLocal file numcopies key Nothing
 | 
								Nothing -> startLocal (Just file) numcopies key Nothing
 | 
				
			||||||
			Just remote -> do
 | 
								Just remote -> do
 | 
				
			||||||
				u <- getUUID
 | 
									u <- getUUID
 | 
				
			||||||
				if Remote.uuid remote == u
 | 
									if Remote.uuid remote == u
 | 
				
			||||||
					then startLocal file numcopies key Nothing
 | 
										then startLocal (Just file) numcopies key Nothing
 | 
				
			||||||
					else startRemote file numcopies key remote
 | 
										else startRemote (Just file) numcopies key remote
 | 
				
			||||||
 | 
					
 | 
				
			||||||
startLocal :: FilePath -> Maybe Int -> Key -> Maybe Remote -> CommandStart
 | 
					startLocal :: AssociatedFile -> Maybe Int -> Key -> Maybe Remote -> CommandStart
 | 
				
			||||||
startLocal file numcopies key knownpresentremote = stopUnless (inAnnex key) $ do
 | 
					startLocal afile numcopies key knownpresentremote = stopUnless (inAnnex key) $ do
 | 
				
			||||||
	showStart "drop" file
 | 
						showStart "drop" (fromMaybe (key2file key) afile)
 | 
				
			||||||
	next $ performLocal key numcopies knownpresentremote
 | 
						next $ performLocal key numcopies knownpresentremote
 | 
				
			||||||
 | 
					
 | 
				
			||||||
startRemote :: FilePath -> Maybe Int -> Key -> Remote -> CommandStart
 | 
					startRemote :: AssociatedFile -> Maybe Int -> Key -> Remote -> CommandStart
 | 
				
			||||||
startRemote file numcopies key remote = do
 | 
					startRemote afile numcopies key remote = do
 | 
				
			||||||
	showStart ("drop " ++ Remote.name remote) file
 | 
						showStart ("drop " ++ Remote.name remote) (fromMaybe (key2file key) afile)
 | 
				
			||||||
	next $ performRemote key numcopies remote
 | 
						next $ performRemote key numcopies remote
 | 
				
			||||||
 | 
					
 | 
				
			||||||
performLocal :: Key -> Maybe Int -> Maybe Remote -> CommandPerform
 | 
					performLocal :: Key -> Maybe Int -> Maybe Remote -> CommandPerform
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,18 +18,25 @@ import Annex.Content
 | 
				
			||||||
import qualified Annex
 | 
					import qualified Annex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def :: [Command]
 | 
					def :: [Command]
 | 
				
			||||||
def = [withOptions fromToOptions $ command "mirror" paramPaths seek
 | 
					def = [withOptions (fromToOptions ++ keyOptions) $
 | 
				
			||||||
	SectionCommon "mirror content of files to/from another repository"]
 | 
						command "mirror" paramPaths seek
 | 
				
			||||||
 | 
							SectionCommon "mirror content of files to/from another repository"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
seek :: [CommandSeek]
 | 
					seek :: [CommandSeek]
 | 
				
			||||||
seek =
 | 
					seek =
 | 
				
			||||||
	[ withField toOption Remote.byNameWithUUID $ \to ->
 | 
						[ withField toOption Remote.byNameWithUUID $ \to ->
 | 
				
			||||||
	  withField fromOption Remote.byNameWithUUID $ \from ->
 | 
						  withField fromOption Remote.byNameWithUUID $ \from ->
 | 
				
			||||||
 | 
						  withKeyOptions (startKey Nothing to from Nothing) $
 | 
				
			||||||
	  withFilesInGit $ whenAnnexed $ start to from
 | 
						  withFilesInGit $ whenAnnexed $ start to from
 | 
				
			||||||
	]
 | 
						]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
 | 
					start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
 | 
				
			||||||
start to from file (key, _backend) = do
 | 
					start to from file (key, _backend) = do
 | 
				
			||||||
 | 
						numcopies <- numCopies file
 | 
				
			||||||
 | 
						startKey numcopies to from (Just file) key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					startKey :: Maybe Int -> Maybe Remote -> Maybe Remote -> Maybe FilePath -> Key -> CommandStart
 | 
				
			||||||
 | 
					startKey numcopies to from afile key = do
 | 
				
			||||||
	noAuto
 | 
						noAuto
 | 
				
			||||||
	case (from, to) of
 | 
						case (from, to) of
 | 
				
			||||||
		(Nothing, Nothing) -> error "specify either --from or --to"
 | 
							(Nothing, Nothing) -> error "specify either --from or --to"
 | 
				
			||||||
| 
						 | 
					@ -40,19 +47,15 @@ start to from file (key, _backend) = do
 | 
				
			||||||
	noAuto = whenM (Annex.getState Annex.auto) $
 | 
						noAuto = whenM (Annex.getState Annex.auto) $
 | 
				
			||||||
		error "--auto is not supported for mirror"
 | 
							error "--auto is not supported for mirror"
 | 
				
			||||||
	mirrorto r = ifM (inAnnex key)
 | 
						mirrorto r = ifM (inAnnex key)
 | 
				
			||||||
		( Command.Move.toStart r False (Just file) key
 | 
							( Command.Move.toStart r False afile key
 | 
				
			||||||
		, do
 | 
							, Command.Drop.startRemote afile numcopies key r
 | 
				
			||||||
			numcopies <- numCopies file
 | 
					 | 
				
			||||||
			Command.Drop.startRemote file numcopies key r
 | 
					 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
	mirrorfrom r = do
 | 
						mirrorfrom r = do
 | 
				
			||||||
		haskey <- Remote.hasKey r key
 | 
							haskey <- Remote.hasKey r key
 | 
				
			||||||
		case haskey of
 | 
							case haskey of
 | 
				
			||||||
			Left _ -> stop
 | 
								Left _ -> stop
 | 
				
			||||||
			Right True -> Command.Get.start' (return True) Nothing key (Just file)
 | 
								Right True -> Command.Get.start' (return True) Nothing key afile
 | 
				
			||||||
			Right False -> ifM (inAnnex key)
 | 
								Right False -> ifM (inAnnex key)
 | 
				
			||||||
				( do
 | 
									( Command.Drop.startLocal afile numcopies key Nothing
 | 
				
			||||||
					numcopies <- numCopies file
 | 
					 | 
				
			||||||
					Command.Drop.startLocal file numcopies key Nothing
 | 
					 | 
				
			||||||
				, stop
 | 
									, stop
 | 
				
			||||||
				)
 | 
									)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								debian/changelog
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/changelog
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
git-annex (5.20131231) UNRELEASED; urgency=medium
 | 
					git-annex (5.20131231) UNRELEASED; urgency=medium
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * mirror: Support --all (and --unused).
 | 
				
			||||||
  * external special remote protocol: Added GETUUID.
 | 
					  * external special remote protocol: Added GETUUID.
 | 
				
			||||||
  * Windows: Fix bug in direct mode merge code that could cause files
 | 
					  * Windows: Fix bug in direct mode merge code that could cause files
 | 
				
			||||||
    in subdirectories to go missing.
 | 
					    in subdirectories to go missing.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -181,11 +181,16 @@ subdirectories).
 | 
				
			||||||
  repository. If a file's content is present in the source repository, it is
 | 
					  repository. If a file's content is present in the source repository, it is
 | 
				
			||||||
  copied to the destination repository. If a file's content is not present in
 | 
					  copied to the destination repository. If a file's content is not present in
 | 
				
			||||||
  the source repository, it will be dropped from the destination repository
 | 
					  the source repository, it will be dropped from the destination repository
 | 
				
			||||||
  when possible.
 | 
					  when the numcopies setting allows.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Note that mirror does not sync the git repository, but only the file
 | 
					  Note that mirror does not sync the git repository, but only the file
 | 
				
			||||||
  contents.
 | 
					  contents.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Also, --all may be specified to mirror all objects stored in the git
 | 
				
			||||||
 | 
					  annex, not only objects used by currently existing files. However, this
 | 
				
			||||||
 | 
					  bypasses checking the .gitattributes annex.numcopies setting when
 | 
				
			||||||
 | 
					  dropping files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* `addurl [url ...]`
 | 
					* `addurl [url ...]`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Downloads each url to its own file, which is added to the annex.
 | 
					  Downloads each url to its own file, which is added to the annex.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue