This was potentially a hole in the readonly mode armor even before my last commit. If the user could push a git-annex branch to a repo, they could get git-annex-shell to initialize the repo. After my last commit, the user didn't even need to be allowed to push a branch to init the repo, so this hole certianly needs to be closed now.
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			Haskell
		
	
	
	
	
	
{- git-annex command
 | 
						|
 -
 | 
						|
 - Copyright 2010-2014 Joey Hess <id@joeyh.name>
 | 
						|
 -
 | 
						|
 - Licensed under the GNU GPL version 3 or higher.
 | 
						|
 -}
 | 
						|
 | 
						|
module Command.ConfigList where
 | 
						|
 | 
						|
import Common.Annex
 | 
						|
import Command
 | 
						|
import Annex.UUID
 | 
						|
import Annex.Init
 | 
						|
import qualified Annex.Branch
 | 
						|
import qualified Git.Config
 | 
						|
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 start
 | 
						|
 | 
						|
start :: CommandStart
 | 
						|
start = do
 | 
						|
	u <- findOrGenUUID
 | 
						|
	showConfig "annex.uuid" $ fromUUID u
 | 
						|
	showConfig coreGCryptId =<< fromRepo (Git.Config.get coreGCryptId "")
 | 
						|
	stop
 | 
						|
  where
 | 
						|
	showConfig k v = liftIO $ putStrLn $ 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
 | 
						|
				getUUID
 | 
						|
			, return NoUUID
 | 
						|
			)
 |