init: Avoid scanning for annexed files, which can be lengthy in a
large repository. Instead that scan is done on demand. This lets git-annex
init be run and some query commands be used in a repository without
waiting.
Note that autoinit already behaved this way, so while this will mean some
commands like git-annex get/unlock/add will do the scan the first time run,
that is not really a significant behavior change.
And, it's really better to have a consistent behavior. The reason for
the inconsistency was a strange bug discussed in
b3c4579c79. Avoiding reconcileStaged in
init will keep avoiding whatever that was.
Sponsored-by: Dartmouth College's DANDI project
		
	
			
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			Haskell
		
	
	
	
	
	
{- git-annex command
 | 
						|
 -
 | 
						|
 - Copyright 2010-2014 Joey Hess <id@joeyh.name>
 | 
						|
 -
 | 
						|
 - Licensed under the GNU AGPL version 3 or higher.
 | 
						|
 -}
 | 
						|
 | 
						|
module Command.ConfigList where
 | 
						|
 | 
						|
import Command
 | 
						|
import Annex.UUID
 | 
						|
import Annex.Init
 | 
						|
import qualified Annex.Branch
 | 
						|
import qualified Git.Config
 | 
						|
import Git.Types
 | 
						|
import Remote.GCrypt (coreGCryptId)
 | 
						|
import qualified CmdLine.GitAnnexShell.Fields as Fields
 | 
						|
import CmdLine.GitAnnexShell.Checks
 | 
						|
 | 
						|
cmd :: Command
 | 
						|
cmd = noCommit $ dontCheck repoExists $
 | 
						|
	command "configlist" SectionPlumbing 
 | 
						|
		"outputs relevant git configuration"
 | 
						|
		paramNothing (withParams seek)
 | 
						|
 | 
						|
seek :: CmdParams -> CommandSeek
 | 
						|
seek = withNothing (commandAction start)
 | 
						|
 | 
						|
start :: CommandStart
 | 
						|
start = do
 | 
						|
	u <- findOrGenUUID
 | 
						|
	showConfig configkeyUUID $ fromUUID u
 | 
						|
	showConfig coreGCryptId . fromConfigValue
 | 
						|
		=<< fromRepo (Git.Config.get coreGCryptId mempty)
 | 
						|
	stop
 | 
						|
  where
 | 
						|
	showConfig k v = liftIO $ putStrLn $ fromConfigKey k ++ "=" ++ v
 | 
						|
 | 
						|
{- The repository may not yet have a UUID; automatically initialize it
 | 
						|
 - when there's a git-annex branch available or if the autoinit field was
 | 
						|
 - set. -}
 | 
						|
findOrGenUUID :: Annex UUID
 | 
						|
findOrGenUUID = do
 | 
						|
	u <- getUUID
 | 
						|
	if u /= NoUUID
 | 
						|
		then return u
 | 
						|
		else ifM (Annex.Branch.hasSibling <||> (isJust <$> Fields.getField Fields.autoInit))
 | 
						|
			( do
 | 
						|
				liftIO checkNotReadOnly
 | 
						|
				initialize Nothing Nothing
 | 
						|
				getUUID
 | 
						|
			, return NoUUID
 | 
						|
			)
 |