import: Before removing a duplicate file in --deduplicate or --clean-duplicates mode, verify that enough copies of its content still exist.
This commit is contained in:
		
					parent
					
						
							
								38c458b407
							
						
					
				
			
			
				commit
				
					
						ac6b492711
					
				
			
		
					 3 changed files with 28 additions and 2 deletions
				
			
		| 
						 | 
					@ -17,6 +17,9 @@ import Remote
 | 
				
			||||||
import Types.KeySource
 | 
					import Types.KeySource
 | 
				
			||||||
import Types.Key
 | 
					import Types.Key
 | 
				
			||||||
import Annex.CheckIgnore
 | 
					import Annex.CheckIgnore
 | 
				
			||||||
 | 
					import Annex.NumCopies
 | 
				
			||||||
 | 
					import Types.TrustLevel
 | 
				
			||||||
 | 
					import Logs.Trust
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cmd :: [Command]
 | 
					cmd :: [Command]
 | 
				
			||||||
cmd = [withOptions opts $ notBareRepo $ command "import" paramPaths seek
 | 
					cmd = [withOptions opts $ notBareRepo $ command "import" paramPaths seek
 | 
				
			||||||
| 
						 | 
					@ -76,8 +79,14 @@ start mode (srcfile, destfile) =
 | 
				
			||||||
  where
 | 
					  where
 | 
				
			||||||
	deletedup k = do
 | 
						deletedup k = do
 | 
				
			||||||
		showNote $ "duplicate of " ++ key2file k
 | 
							showNote $ "duplicate of " ++ key2file k
 | 
				
			||||||
		liftIO $ removeFile srcfile
 | 
							ifM (verifiedExisting k destfile)
 | 
				
			||||||
		next $ return True
 | 
								( do
 | 
				
			||||||
 | 
									liftIO $ removeFile srcfile
 | 
				
			||||||
 | 
									next $ return True
 | 
				
			||||||
 | 
								, do
 | 
				
			||||||
 | 
									warning "could not verify that the content is still present in the annex; not removing from the import location"
 | 
				
			||||||
 | 
									stop
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
	importfile = do
 | 
						importfile = do
 | 
				
			||||||
		ignored <- not <$> Annex.getState Annex.force <&&> checkIgnored destfile
 | 
							ignored <- not <$> Annex.getState Annex.force <&&> checkIgnored destfile
 | 
				
			||||||
		if ignored
 | 
							if ignored
 | 
				
			||||||
| 
						 | 
					@ -120,3 +129,14 @@ start mode (srcfile, destfile) =
 | 
				
			||||||
		CleanDuplicates -> checkdup (Just deletedup) Nothing
 | 
							CleanDuplicates -> checkdup (Just deletedup) Nothing
 | 
				
			||||||
		SkipDuplicates -> checkdup Nothing (Just importfile)
 | 
							SkipDuplicates -> checkdup Nothing (Just importfile)
 | 
				
			||||||
		_ -> return (Just importfile)
 | 
							_ -> return (Just importfile)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					verifiedExisting :: Key -> FilePath -> Annex Bool
 | 
				
			||||||
 | 
					verifiedExisting key destfile = do
 | 
				
			||||||
 | 
						-- Look up the numcopies setting for the file that it would be
 | 
				
			||||||
 | 
						-- imported to, if it were imported.
 | 
				
			||||||
 | 
						need <- getFileNumCopies destfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						(remotes, trusteduuids) <- knownCopies key
 | 
				
			||||||
 | 
						untrusteduuids <- trustGet UnTrusted
 | 
				
			||||||
 | 
						let tocheck = Remote.remotesWithoutUUID remotes (trusteduuids++untrusteduuids)
 | 
				
			||||||
 | 
						verifyEnoughCopies [] key need trusteduuids [] tocheck
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								debian/changelog
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								debian/changelog
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -18,6 +18,9 @@ git-annex (5.20150421) UNRELEASED; urgency=medium
 | 
				
			||||||
  * Improve integration with KDE's file manager to work with dolphin
 | 
					  * Improve integration with KDE's file manager to work with dolphin
 | 
				
			||||||
    version 14.12.3 while still being compatable with 4.14.2.
 | 
					    version 14.12.3 while still being compatable with 4.14.2.
 | 
				
			||||||
    Thanks, silvio.
 | 
					    Thanks, silvio.
 | 
				
			||||||
 | 
					  * import: Before removing a duplicate file in --deduplicate or
 | 
				
			||||||
 | 
					    --clean-duplicates mode, verify that enough copies of its content still
 | 
				
			||||||
 | 
					    exist.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 -- Joey Hess <id@joeyh.name>  Tue, 21 Apr 2015 15:54:10 -0400
 | 
					 -- Joey Hess <id@joeyh.name>  Tue, 21 Apr 2015 15:54:10 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,3 +25,6 @@ g-a import --clean-duplicates ~/tmp/importme (containing a, b and c) into 'impor
 | 
				
			||||||
### Please provide any additional information below.
 | 
					### Please provide any additional information below.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I can provide the script if it is wanted (coded in Perl, couple of non-core dependencies).
 | 
					I can provide the script if it is wanted (coded in Perl, couple of non-core dependencies).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> Decided to go ahead and make it check remotes like drop does, so [[done]]
 | 
				
			||||||
 | 
					> --[[Joey]]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue