add: Display progress meter when hashing files.
* add: Display progress meter when hashing files. * add: Support --json-progress option.
This commit is contained in:
		
					parent
					
						
							
								554b307931
							
						
					
				
			
			
				commit
				
					
						42c386fc47
					
				
			
		
					 7 changed files with 35 additions and 6 deletions
				
			
		|  | @ -14,6 +14,8 @@ git-annex (7.20190616) UNRELEASED; urgency=medium | ||||||
|     output the feed content that was downloaded. |     output the feed content that was downloaded. | ||||||
|   * init: Fix a reversion in the last release that prevented automatically |   * init: Fix a reversion in the last release that prevented automatically | ||||||
|     generating and setting a description for the repository. |     generating and setting a description for the repository. | ||||||
|  |   * add: Display progress meter when hashing files. | ||||||
|  |   * add: Support --json-progress option. | ||||||
| 
 | 
 | ||||||
|  -- Joey Hess <id@joeyh.name>  Sat, 15 Jun 2019 12:38:25 -0400 |  -- Joey Hess <id@joeyh.name>  Sat, 15 Jun 2019 12:38:25 -0400 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -20,12 +20,12 @@ import Annex.FileMatcher | ||||||
| import Annex.Link | import Annex.Link | ||||||
| import Annex.Version | import Annex.Version | ||||||
| import Annex.Tmp | import Annex.Tmp | ||||||
|  | import Messages.Progress | ||||||
| import Git.FilePath | import Git.FilePath | ||||||
| import Utility.Metered |  | ||||||
| 
 | 
 | ||||||
| cmd :: Command | cmd :: Command | ||||||
| cmd = notBareRepo $  | cmd = notBareRepo $  | ||||||
| 	withGlobalOptions [jobsOption, jsonOptions, fileMatchingOptions] $ | 	withGlobalOptions [jobsOption, jsonOptions, jsonProgressOption, fileMatchingOptions] $ | ||||||
| 		command "add" SectionCommon "add files to annex" | 		command "add" SectionCommon "add files to annex" | ||||||
| 			paramPaths (seek <$$> optParser) | 			paramPaths (seek <$$> optParser) | ||||||
| 
 | 
 | ||||||
|  | @ -142,7 +142,11 @@ perform file = withOtherTmp $ \tmpdir -> do | ||||||
| 		{ lockingFile = lockingfile | 		{ lockingFile = lockingfile | ||||||
| 		, hardlinkFileTmpDir = Just tmpdir | 		, hardlinkFileTmpDir = Just tmpdir | ||||||
| 		} | 		} | ||||||
| 	lockDown cfg file >>= ingestAdd nullMeterUpdate >>= finish | 	ld <- lockDown cfg file | ||||||
|  | 	let sizer = keySource <$> ld | ||||||
|  | 	v <- metered Nothing sizer $ \_meter meterupdate -> | ||||||
|  | 		ingestAdd meterupdate ld | ||||||
|  | 	finish v | ||||||
|   where |   where | ||||||
| 	finish (Just key) = next $ cleanup key True | 	finish (Just key) = next $ cleanup key True | ||||||
| 	finish Nothing = stop | 	finish Nothing = stop | ||||||
|  |  | ||||||
|  | @ -15,6 +15,8 @@ import Utility.Metered | ||||||
| import Types | import Types | ||||||
| import Types.Messages | import Types.Messages | ||||||
| import Types.Key | import Types.Key | ||||||
|  | import Types.KeySource | ||||||
|  | import Utility.InodeCache | ||||||
| import qualified Messages.JSON as JSON | import qualified Messages.JSON as JSON | ||||||
| import Messages.Concurrent | import Messages.Concurrent | ||||||
| 
 | 
 | ||||||
|  | @ -24,14 +26,24 @@ import qualified System.Console.Concurrent as Console | ||||||
| {- Class of things from which a size can be gotten to display a progress | {- Class of things from which a size can be gotten to display a progress | ||||||
|  - meter. -} |  - meter. -} | ||||||
| class MeterSize t where | class MeterSize t where | ||||||
| 	getMeterSize :: t -> Annex (Maybe Integer) | 	getMeterSize :: t -> Annex (Maybe FileSize) | ||||||
| 
 | 
 | ||||||
| instance MeterSize (Maybe Integer) where | instance MeterSize t => MeterSize (Maybe t) where | ||||||
| 	getMeterSize = pure | 	getMeterSize Nothing = pure Nothing | ||||||
|  | 	getMeterSize (Just t) = getMeterSize t | ||||||
|  | 
 | ||||||
|  | instance MeterSize FileSize where | ||||||
|  | 	getMeterSize = pure . Just | ||||||
| 
 | 
 | ||||||
| instance MeterSize Key where | instance MeterSize Key where | ||||||
| 	getMeterSize = pure . keySize | 	getMeterSize = pure . keySize | ||||||
| 
 | 
 | ||||||
|  | instance MeterSize InodeCache where | ||||||
|  | 	getMeterSize = pure . Just . inodeCacheFileSize | ||||||
|  | 
 | ||||||
|  | instance MeterSize KeySource where | ||||||
|  | 	getMeterSize = maybe (pure Nothing) getMeterSize . inodeCache | ||||||
|  | 
 | ||||||
| {- When the key's size is not known, the file is statted to get the size. | {- When the key's size is not known, the file is statted to get the size. | ||||||
|  - This allows uploads of keys without size to still have progress |  - This allows uploads of keys without size to still have progress | ||||||
|  - displayed. |  - displayed. | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ | ||||||
| module Utility.InodeCache ( | module Utility.InodeCache ( | ||||||
| 	InodeCache, | 	InodeCache, | ||||||
| 	InodeComparisonType(..), | 	InodeComparisonType(..), | ||||||
|  | 	inodeCacheFileSize, | ||||||
| 
 | 
 | ||||||
| 	compareStrong, | 	compareStrong, | ||||||
| 	compareWeak, | 	compareWeak, | ||||||
|  | @ -58,6 +59,9 @@ data InodeCachePrim = InodeCachePrim FileID FileSize MTime | ||||||
| newtype InodeCache = InodeCache InodeCachePrim | newtype InodeCache = InodeCache InodeCachePrim | ||||||
| 	deriving (Show) | 	deriving (Show) | ||||||
| 
 | 
 | ||||||
|  | inodeCacheFileSize :: InodeCache -> FileSize | ||||||
|  | inodeCacheFileSize (InodeCache (InodeCachePrim _ sz _)) = sz | ||||||
|  | 
 | ||||||
| {- Inode caches can be compared in two different ways, either weakly | {- Inode caches can be compared in two different ways, either weakly | ||||||
|  - or strongly. -} |  - or strongly. -} | ||||||
| data InodeComparisonType = Weakly | Strongly | data InodeComparisonType = Weakly | Strongly | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								debian/control
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/control
									
										
									
									
										vendored
									
									
								
							|  | @ -12,6 +12,7 @@ Build-Depends: | ||||||
| 	libghc-pcre-light-dev, | 	libghc-pcre-light-dev, | ||||||
| 	libghc-cryptonite-dev, | 	libghc-cryptonite-dev, | ||||||
| 	libghc-memory-dev, | 	libghc-memory-dev, | ||||||
|  | 	libghc-deepseq-dev, | ||||||
| 	libghc-attoparsec-dev, | 	libghc-attoparsec-dev, | ||||||
| 	libghc-sandi-dev, | 	libghc-sandi-dev, | ||||||
| 	libghc-utf8-string-dev, | 	libghc-utf8-string-dev, | ||||||
|  |  | ||||||
|  | @ -68,6 +68,10 @@ annexed content, and other symlinks. | ||||||
|   Enable JSON output. This is intended to be parsed by programs that use |   Enable JSON output. This is intended to be parsed by programs that use | ||||||
|   git-annex. Each line of output is a JSON object. |   git-annex. Each line of output is a JSON object. | ||||||
| 
 | 
 | ||||||
|  | * `--json-progress` | ||||||
|  | 
 | ||||||
|  |   Include progress objects in JSON output. | ||||||
|  | 
 | ||||||
| * `--json-error-messages` | * `--json-error-messages` | ||||||
| 
 | 
 | ||||||
|   Messages that would normally be output to standard error are included in |   Messages that would normally be output to standard error are included in | ||||||
|  |  | ||||||
|  | @ -3,3 +3,5 @@ ATM there is no `--json-progress` in `git annex add` (only `--json`), so no feed | ||||||
| Cheers! | Cheers! | ||||||
| 
 | 
 | ||||||
| [[!meta author=yoh]] | [[!meta author=yoh]] | ||||||
|  | 
 | ||||||
|  | > [[done]] --[[Joey]] | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Joey Hess
				Joey Hess