packages feed

git-annex 5.20131118 → 5.20131120

raw patch · 30 files changed

+180/−174 lines, 30 files

Files

.gitignore view
@@ -15,8 +15,6 @@ git-annex-shell.1 git-union-merge git-union-merge.1-git-recover-repository-git-recover-repository.1 doc/.ikiwiki html *.tix
Annex/Branch.hs view
@@ -351,7 +351,7 @@ 		Annex.changeState $ \s -> s { Annex.repo = g' } 		checkIndexOnce $ unlessM (liftIO $ doesFileExist f) $ do 			unless bootstrapping create-			liftIO $ createDirectoryIfMissing True $ takeDirectory f+			createAnnexDirectory $ takeDirectory f 			unless bootstrapping $ inRepo genIndex 		a 	Annex.changeState $ \s -> s { Annex.repo = (Annex.repo s) { gitEnv = gitEnv g} }@@ -386,7 +386,7 @@ setIndexSha ref = do 	f <- fromRepo gitAnnexIndexStatus 	liftIO $ writeFile f $ show ref ++ "\n"-	setAnnexPerm f+	setAnnexFilePerm f  {- Stages the journal into the index and returns an action that will  - clean up the staged journal files, which should only be run once
Annex/Content.hs view
@@ -53,9 +53,7 @@ import Annex.Link import Annex.Content.Direct import Annex.ReplaceFile-#ifndef mingw32_HOST_OS import Annex.Exception-#endif  {- Checks if a given key's content is currently present. -} inAnnex :: Key -> Annex Bool
Annex/Perms.hs view
@@ -6,7 +6,8 @@  -}  module Annex.Perms (-	setAnnexPerm,+	setAnnexFilePerm,+	setAnnexDirPerm, 	annexFileMode, 	createAnnexDirectory, 	noUmask,@@ -33,17 +34,27 @@ 		Annex.changeState $ \s -> s { Annex.shared = Just shared } 		a shared +setAnnexFilePerm :: FilePath -> Annex ()+setAnnexFilePerm = setAnnexPerm False++setAnnexDirPerm :: FilePath -> Annex ()+setAnnexDirPerm = setAnnexPerm True+ {- Sets appropriate file mode for a file or directory in the annex,  - other than the content files and content directory. Normally,  - use the default mode, but with core.sharedRepository set,  - allow the group to write, etc. -}-setAnnexPerm :: FilePath -> Annex ()-setAnnexPerm file = unlessM crippledFileSystem $+setAnnexPerm :: Bool -> FilePath -> Annex ()+setAnnexPerm isdir file = unlessM crippledFileSystem $ 	withShared $ liftIO . go   where-	go GroupShared = groupWriteRead file+	go GroupShared = modifyFileMode file $ addModes $+		groupSharedModes +++		if isdir then [ ownerExecuteMode, groupExecuteMode ] else [] 	go AllShared = modifyFileMode file $ addModes $-		[ ownerWriteMode, groupWriteMode ] ++ readModes+		readModes +++		[ ownerWriteMode, groupWriteMode ] +++		if isdir then executeModes else [] 	go _ = noop  {- Gets the appropriate mode to use for creating a file in the annex@@ -54,10 +65,7 @@ 	go GroupShared = sharedmode 	go AllShared = combineModes (sharedmode:readModes) 	go _ = stdFileMode-	sharedmode = combineModes-		[ ownerWriteMode, groupWriteMode-		, ownerReadMode, groupReadMode-		]+	sharedmode = combineModes groupSharedModes  {- Creates a directory inside the gitAnnexDir, including any parent  - directories. Makes directories with appropriate permissions. -}@@ -74,7 +82,7 @@ 	  where 		done = forM_ below $ \p -> do 			liftIO $ createDirectoryIfMissing True p-			setAnnexPerm p+			setAnnexDirPerm p  {- Blocks writing to the directory an annexed file is in, to prevent the  - file accidentially being deleted. However, if core.sharedRepository
CHANGELOG view
@@ -1,3 +1,17 @@+git-annex (5.20131120) unstable; urgency=low++  * Fix Debian package to not try to run test suite, since haskell-tasty+    is not out of new or in Build-Depends yet.+  * dropunused, addunused: Allow "all" instead of a range to+    act on all unused data.+  * Ensure execute bit is set on directories when core.sharedrepository is set.+  * Ensure that core.sharedrepository is honored when creating the .git/annex+    directory.+  * Improve repair code in the case where the index file is corrupt,+    and this hides other problems from git fsck.++ -- Joey Hess <joeyh@debian.org>  Wed, 20 Nov 2013 12:54:18 -0400+ git-annex (5.20131118) unstable; urgency=low    * Direct mode repositories now have core.bare=true set, to prevent
Command/SendKey.hs view
@@ -46,6 +46,4 @@ 	ok <- maybe (a $ const noop) 		(\u -> runTransfer (Transfer direction (toUUID u) key) afile noRetry a) 		=<< Fields.getField Fields.remoteUUID-	liftIO $ if ok-		then exitSuccess-		else exitFailure+	liftIO $ exitBool ok
Command/TransferKey.hs view
@@ -56,4 +56,4 @@ 		getViaTmp key $ \t -> Remote.retrieveKeyFile remote key file t p  go :: Annex Bool -> CommandPerform-go a = ifM a ( liftIO exitSuccess,  liftIO exitFailure)+go a = a >>= liftIO . exitBool
Command/Unused.hs view
@@ -332,11 +332,13 @@ 	unused <- readUnusedLog "" 	unusedbad <- readUnusedLog "bad" 	unusedtmp <- readUnusedLog "tmp"+	let m = unused `M.union` unusedbad `M.union` unusedtmp 	return $ map (a $ UnusedMaps unused unusedbad unusedtmp) $-		concatMap unusedSpec params+		concatMap (unusedSpec m) params -unusedSpec :: String -> [Int]-unusedSpec spec+unusedSpec :: UnusedMap -> String -> [Int]+unusedSpec m spec+	| spec == "all" = [fst (M.findMin m)..fst (M.findMax m)] 	| "-" `isInfixOf` spec = range $ separate (== '-') spec 	| otherwise = maybe badspec (: []) (readish spec)   where
Git/Repair.hs view
@@ -8,6 +8,7 @@ module Git.Repair ( 	runRepair, 	runRepairOf,+	successfulRepair, 	cleanCorruptObjects, 	retrieveMissingObjects, 	resetLocalBranches,@@ -47,7 +48,7 @@  - Since git fsck may crash on corrupt objects, and so not  - report the full set of corrupt or missing objects,  - this removes corrupt objects, and re-runs fsck, until it- - stabalizes.+ - stabilizes.  -  - To remove corrupt objects, unpack all packs, and remove the packs  - (to handle corrupt packs), and remove loose object files.@@ -78,11 +79,13 @@ 		putStrLn "Re-running git fsck to see if it finds more problems." 		v <- findBroken False r 		case v of-			Nothing -> error $ unwords-				[ "git fsck found a problem, which was not corrected after removing"-				, show (S.size oldbad)-				, "corrupt objects."-				]+			Nothing -> do+				hPutStrLn stderr $ unwords+					[ "git fsck found a problem, which was not corrected after removing"+					, show (S.size oldbad)+					, "corrupt objects."+					]+				return S.empty 			Just newbad -> do 				removed <- removeLoose r newbad 				let s = S.union oldbad newbad@@ -452,6 +455,9 @@ 			putStrLn "No problems found." 			return (True, S.empty, []) +successfulRepair :: (Bool, MissingObjects, [Branch]) -> Bool+successfulRepair = fst3+ runRepairOf :: FsckResults -> Bool -> Maybe FilePath -> Repo -> IO (Bool, MissingObjects, [Branch]) runRepairOf fsckresult forced referencerepo g = do 	missing <- cleanCorruptObjects fsckresult g@@ -512,8 +518,12 @@ 	 	corruptedindex = do 		nukeIndex g+		-- The corrupted index can prevent fsck from finding other+		-- problems, so re-run repair.+		fsckresult' <- findBroken False g+		result <- runRepairOf fsckresult' forced referencerepo g 		putStrLn "Removed the corrupted index file. You should look at what files are present in your working tree and git add them back to the index when appropriate."-		return (True, S.empty, [])+		return result  	successfulfinish stillmissing modifiedbranches = do 		mapM_ putStrLn@@ -525,10 +535,10 @@ 	unsuccessfulfinish stillmissing = do 		if repoIsLocalBare g 			then do-				putStrLn "If you have a clone of this bare repository, you should add it as a remote of this repository, and re-run git-recover-repository."-				putStrLn "If there are no clones of this repository, you can instead run git-recover-repository with the --force parameter to force recovery to a possibly usable state."+				putStrLn "If you have a clone of this bare repository, you should add it as a remote of this repository, and retry."+				putStrLn "If there are no clones of this repository, you can instead retry with the --force parameter to force recovery to a possibly usable state." 				return (False, stillmissing, []) 			else needforce stillmissing 	needforce stillmissing = do-		putStrLn "To force a recovery to a usable state, run this command again with the --force parameter."+		putStrLn "To force a recovery to a usable state, retry with the --force parameter." 		return (False, stillmissing, [])
Init.hs view
@@ -29,6 +29,7 @@ import Annex.Direct import Annex.Content.Direct import Annex.Environment+import Annex.Perms import Backend #ifndef mingw32_HOST_OS import Utility.UserInfo@@ -111,9 +112,8 @@ #else 	tmp <- fromRepo gitAnnexTmpDir 	let f = tmp </> "gaprobe"-	liftIO $ do-		createDirectoryIfMissing True tmp-		writeFile f ""+	createAnnexDirectory tmp+	liftIO $ writeFile f "" 	uncrippled <- liftIO $ probe f 	liftIO $ removeFile f 	return $ not uncrippled@@ -149,8 +149,8 @@ #else 	tmp <- fromRepo gitAnnexTmpDir 	let f = tmp </> "gaprobe"+	createAnnexDirectory tmp 	liftIO $ do-		createDirectoryIfMissing True tmp 		nukeFile f 		ms <- tryIO $ do 			createNamedPipe f ownerReadMode
Makefile view
@@ -30,12 +30,8 @@ # These are not built normally. git-union-merge.1: doc/git-union-merge.mdwn 	./Build/mdwn2man git-union-merge 1 doc/git-union-merge.mdwn > git-union-merge.1-git-recover-repository.1: doc/git-recover-repository.mdwn-	./Build/mdwn2man git-recover-repository 1 doc/git-recover-repository.mdwn > git-recover-repository.1 git-union-merge: 	$(GHC) --make -threaded $@-git-recover-repository:-	$(GHC) --make -threaded $@  install-mans: $(mans) 	install -d $(DESTDIR)$(PREFIX)/share/man/man1@@ -82,7 +78,7 @@ 		doc/.ikiwiki html dist tags Build/SysConfig.hs build-stamp \ 		Setup Build/InstallDesktopFile Build/EvilSplicer \ 		Build/Standalone Build/OSXMkLibs \-		git-union-merge git-recover-repository+		git-union-merge 	find . -name \*.o -exec rm {} \; 	find . -name \*.hi -exec rm {} \; 
Utility/FileMode.hs view
@@ -65,11 +65,14 @@ allowWrite f = modifyFileMode f $ addModes [ownerWriteMode]  {- Allows owner and group to read and write to a file. -}-groupWriteRead :: FilePath -> IO ()-groupWriteRead f = modifyFileMode f $ addModes+groupSharedModes :: [FileMode]+groupSharedModes = 	[ ownerWriteMode, groupWriteMode 	, ownerReadMode, groupReadMode 	]++groupWriteRead :: FilePath -> IO ()+groupWriteRead f = modifyFileMode f $ addModes groupSharedModes  checkMode :: FileMode -> FileMode -> Bool checkMode checkfor mode = checkfor `intersectFileModes` mode == checkfor
Utility/Misc.hs view
@@ -15,6 +15,7 @@ import Data.Char import Data.List import Control.Applicative+import System.Exit #ifndef mingw32_HOST_OS import System.Posix.Process (getAnyProcessStatus) import Utility.Exception@@ -136,3 +137,7 @@ #else reapZombies = return () #endif++exitBool :: Bool -> IO a+exitBool False = exitFailure+exitBool True = exitSuccess
Utility/Tmp.hs view
@@ -62,7 +62,7 @@ withTmpDirIn tmpdir template = bracket create remove   where 	remove d = whenM (doesDirectoryExist d) $-		removeDirectoryRecursive d+		return () -- removeDirectoryRecursive d 	create = do 		createDirectoryIfMissing True tmpdir 		makenewdir (tmpdir </> template) (0 :: Int)
debian/changelog view
@@ -1,3 +1,17 @@+git-annex (5.20131120) unstable; urgency=low++  * Fix Debian package to not try to run test suite, since haskell-tasty+    is not out of new or in Build-Depends yet.+  * dropunused, addunused: Allow "all" instead of a range to+    act on all unused data.+  * Ensure execute bit is set on directories when core.sharedrepository is set.+  * Ensure that core.sharedrepository is honored when creating the .git/annex+    directory.+  * Improve repair code in the case where the index file is corrupt,+    and this hides other problems from git fsck.++ -- Joey Hess <joeyh@debian.org>  Wed, 20 Nov 2013 12:54:18 -0400+ git-annex (5.20131118) unstable; urgency=low    * Direct mode repositories now have core.bare=true set, to prevent
debian/rules view
@@ -9,6 +9,9 @@ %: 	dh $@ +override_dh_auto_test:+	echo test suite currently disabled until haskell-tasty is out of NEW+ # Not intended for use by anyone except the author. announcedir: 	@echo ${HOME}/src/git-annex/doc/news
+ doc/bugs/127.0.0.1_references_on_remote_assistant_access.mdwn view
@@ -0,0 +1,20 @@+### Please describe the problem.+When I use git-annex webapp with a remote IP of a headless computer, I am sometimes redirected to a 127.0.0.1 address (with a different port as well)++### What steps will reproduce the problem?+1. Install git-annex as usual. +2. Open git-annex assistant from a headless machine and access the webapp with the --listen option. (e.g. git annex webapp --listen=xxx.yyy.zzz.www)+3. Create your first local repository. Then create a second local repository.+4. When assistant asks you if you want to merge these 2 repositories, try to select the second option (to keep them separated).+5. You are redirected from your remote IP to 127.0.0.1 to a new port number.++(I also encountered the same error at another menu or function, but I don't remember where. Sorry.) ++### What version of git-annex are you using? On what operating system?+4.20130815+Ubuntu 13.10 64-bit (kernel 3.11.0-13-generic x86_64)++### Please provide any additional information below.+Please ask me for any additional information that may be useful.++> [[dup]] of [[Hangs_on_creating_repository_when_using_--listen]]; [[done]] --[[Joey]]
doc/design/assistant/polls/Android_default_directory.mdwn view
@@ -4,4 +4,4 @@ want the first time they run it, but to save typing on android, anything that gets enough votes will be included in a list of choices as well. -[[!poll open=yes expandable=yes 61 "/sdcard/annex" 6 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]+[[!poll open=yes expandable=yes 62 "/sdcard/annex" 6 "Whole /sdcard" 4 "DCIM directory (photos and videos only)" 1 "Same as for regular git-annex. ~/annex/"]]
+ doc/devblog/day_59__release_day.mdwn view
@@ -0,0 +1,11 @@+Release today, right on bi-weekly schedule. Rather startled+at the size of the changelog for this one; along with the direct mode+guard, it adds support for OS X Mavericks, Android 4.3/4.4, and fixes+numerous bugs.++Posted another question in the survey,+<http://git-annex-survey.branchable.com/polls/2013/roadmap/>.++Spun off git-repair as an independant package from git-annex. Of course,+most of the source code is shared with git-annex. I need to do something+with libraries eventually..
+ doc/devblog/day_60__damage_driven_development.mdwn view
@@ -0,0 +1,36 @@+Wrote some evil code you don't want to run today. Git.Destroyer randomly+generates Damage, and applies it to a git repository, in a way that is+reproducible -- applying the same Damage to clones of the same git repo +will always yeild the same result.++This let me build a test harness for git-repair, which repeatedly clones,+damages, and repairs a repository. And when it fails, I can just ask it to+retry after fixing the bug and it'll re-run every attempt it's logged.++This is already yeilding improvements to the git-repair code.+The first randomly constructed Damage that it failed to recover+turned out to be a truncated index file that hid some other+corrupted object files from being repaired.++	[Damage Empty (FileSelector 1),+	 Damage Empty (FileSelector 2),+	 Damage Empty (FileSelector 3),+	 Damage Reverse (FileSelector 3),+	 Damage (ScrambleFileMode 3) (FileSelector 5),+	 Damage Delete (FileSelector 9),+	 Damage (PrependGarbage "¥SOH¥STX¥ENQ¥f¥a¥ACK¥b¥DLE¥n") (FileSelector 9),+	 Damage Empty (FileSelector 12),+	 Damage (CorruptByte 11 25) (FileSelector 6),+	 Damage Empty (FileSelector 5),+	 Damage (ScrambleFileMode 4294967281) (FileSelector 14)+	]++I need to improve the ranges of files that it damages -- currently QuickCheck+seems to only be selecting one of the first 20 or so files. Also, it's quite+common that it will damage `.git/config` so badly that git thinks it's not+a git repository anymore. I am not sure if that is something `git-repair`+should try to deal with.++---++Today's work was sponsored by the WikiMedia Foundation.
doc/git-annex.mdwn view
@@ -509,6 +509,7 @@   `git annex unused`    You can also specify ranges of numbers, such as "1-1000".+  Or, specify "all" to drop all unused data.    To drop the data from a remote, specify `--from.` 
− doc/git-recover-repository.mdwn
@@ -1,40 +0,0 @@-# NAME--git-recover-repository - Fix a broken git repository--# SYNOPSIS--git-recover-repository [--force]--# DESCRIPTION--This can fix a corrupt or broken git repository, which git fsck would-only complain has problems.--It does by deleting all corrupt objects, and retreiving all missing-objects that it can from the remotes of the repository.--If that is not sufficient to fully recover the repository, it can also-reset branches back to commits before the corruption happened, delete-branches that are no longer available due to the lost data, and remove any-missing files from the index. It will only do this if run with the-`--force` option, since that rewrites history and throws out missing data.-Note that the `--force` option never touches tags, even if they are no-longer usable due to missing data.--After running this command, you will probably want to run `git fsck` to-verify it fixed the repository. Note that fsck may still complain about-objects referenced by the reflog, or the stash, if they were unable to be-recovered. This command does not try to clean up either the reflog or the-stash.--Since this command unpacks all packs in the repository, you may want to-run `git gc` afterwards.--# AUTHOR--Joey Hess <joey@kitenet.net>--<http://git-annex.branchable.com/>--Warning: Automatically converted into a man page by mdwn2man. Edit with care
doc/install/OSX.mdwn view
@@ -3,9 +3,9 @@ [[!img /assistant/osx-app.png align=right link=/assistant]] For easy installation, use the prebuilt app bundle. -* 10.9 Mavericks: [git-annex.dmg.bz2](https://downloads.kitenet.net/git-annex/OSX/current/10.9_Mavericks/git-annex.dmg.bz2)+* 10.9 Mavericks: [git-annex.dmg](https://downloads.kitenet.net/git-annex/OSX/current/10.9_Mavericks/git-annex.dmg) * 10.8.2 Mountain Lion: [git-annex.dmg.bz2](https://downloads.kitenet.net/git-annex/OSX/current/10.8.2_Mountain_Lion/git-annex.dmg.bz2) **warning: not being updated any longer**-* 10.7.5 Lion: [git-annex.dmg.bz2](https://downloads.kitenet.net/git-annex/OSX/current/10.7.5_Lion/git-annex.dmg.bz2)+* 10.7.5 Lion: [git-annex.dmg](https://downloads.kitenet.net/git-annex/OSX/current/10.7.5_Lion/git-annex.dmg)  To run the [[git-annex_assistant|/assistant]], just install the app, look for the icon, and start it up. 
− doc/news/version_4.20131002.mdwn
@@ -1,42 +0,0 @@-News for git-annex 4.20131002:--    The layout of gcrypt repositories has changed, and-    if you created one you must manually upgrade it.-    See /usr/share/doc/git-annex/html/upgrades/gcrypt.html--git-annex 4.20131002 released with [[!toggle text="these changes"]]-[[!toggleable text="""-   * Note that the layout of gcrypt repositories has changed, and-     if you created one you must manually upgrade it.-     See http://git-annex.branchable.com/upgrades/gcrypt/-   * webapp: Support setting up and using encrypted git repositories on-     any ssh server, as well as on rsync.net.-   * git-annex-shell: Added support for operating inside gcrypt repositories.-   * Disable receive.denyNonFastForwards when setting up a gcrypt special-     remote, since gcrypt needs to be able to fast-forward the master branch.-   * import: Preserve top-level directory structure.-   * Use cryptohash rather than SHA for hashing when no external hash program-     is available. This is a significant speedup for SHA256 on OSX, for-     example.-   * Added SKEIN256 and SKEIN512 backends.-   * Android build redone from scratch, many dependencies updated,-     and entire build can now be done using provided scripts.-   * assistant: Clear the list of failed transfers when doing a full transfer-     scan. This prevents repeated retries to download files that are not-     available, or are not referenced by the current git tree.-   * indirect, direct: Better behavior when a file is not owned by-     the user running the conversion.-   * add, import, assistant: Better preserve the mtime of symlinks,-     when when adding content that gets deduplicated.-   * Send a git-annex user-agent when downloading urls.-     Overridable with --user-agent option.-     (Not yet done for S3 or WebDAV due to limitations of libraries used.)-   * webapp: Fixed a bug where when a new remote is added, one file-     may fail to sync to or from it due to the transferrer process not-     yet knowing about the new remote.-   * OSX: Bundled gpg upgraded, now compatible with config files-     written by MacGPG.-   * assistant: More robust inotify handling; avoid crashing if a directory-     cannot be read.-   * Moved list of backends and remote types from status to version-     command."""]]
+ doc/news/version_5.20131120.mdwn view
@@ -0,0 +1,11 @@+git-annex 5.20131120 released with [[!toggle text="these changes"]]+[[!toggleable text="""+   * Fix Debian package to not try to run test suite, since haskell-tasty+     is not out of new or in Build-Depends yet.+   * dropunused, addunused: Allow "all" instead of a range to+     act on all unused data.+   * Ensure execute bit is set on directories when core.sharedrepository is set.+   * Ensure that core.sharedrepository is honored when creating the .git/annex+     directory.+   * Improve repair code in the case where the index file is corrupt,+     and this hides other problems from git fsck."""]]
doc/sync.mdwn view
@@ -7,7 +7,7 @@  But it can be harder to use git in a fully decentralized fashion, with no central repository and still keep repositories in sync with one another.-You have to remember to pull from each remote, and merge the appopriate+You have to remember to pull from each remote, and merge the appropriate branch after pulling. It's difficult to *push* to a remote, since git does not allow pushes into the currently checked out branch. 
+ doc/todo/wishlist:_assistant_autostart_port_and_secret_configuration.mdwn view
@@ -0,0 +1,1 @@+When starting the assistant when logging in to the system (`--autostart`) it choses a new port an secret everytime. Having the assistant open in a pinned firefox tab which automatically restores when firefox starts we need to get the url from `.git/annex/url` and copy/paste it into the pinned tab. It would be very nice to have a configuration option which assigns a fixed port and secret so everytime the assistant is autostarted it uses the same settings and firefox is happy to open it automatically on start.
git-annex.1 view
@@ -468,6 +468,7 @@ \fBgit annex unused\fP .IP You can also specify ranges of numbers, such as "1\-1000".+Or, specify "all" to drop all unused data. .IP To drop the data from a remote, specify \fB\-\-from.\fP .IP
git-annex.cabal view
@@ -1,5 +1,5 @@ Name: git-annex-Version: 5.20131118+Version: 5.20131120 Cabal-Version: >= 1.8 License: GPL-3 Maintainer: Joey Hess <joey@kitenet.net>
− git-recover-repository.hs
@@ -1,42 +0,0 @@-{- git-recover-repository program- -- - Copyright 2013 Joey Hess <joey@kitenet.net>- -- - Licensed under the GNU GPL version 3 or higher.- -}--import System.Environment-import qualified Data.Set as S-import Data.Tuple.Utils--import Common-import qualified Git-import qualified Git.CurrentRepo-import qualified Git.Fsck-import qualified Git.Repair-import qualified Git.Config-import qualified Git.Branch--header :: String-header = "Usage: git-recover-repository"--usage :: a-usage = error $ "bad parameters\n\n" ++ header--parseArgs :: IO Bool-parseArgs = do-	args <- getArgs-	return $ or $ map parse args-  where-	parse "--force" = True-	parse _ = usage--main :: IO ()-main = do-	forced <- parseArgs-	-	g <- Git.Config.read =<< Git.CurrentRepo.get-	ifM (fst3 <$> Git.Repair.runRepair forced g)-		( exitSuccess-		, exitFailure-		)