From 20ca89dfa3e3ea9e811e1682ef155510d91983a4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 4 Dec 2015 13:02:56 -0400 Subject: [PATCH] skeleton smudge/clean filters --- CmdLine/GitAnnex.hs | 4 ++++ Command/Clean.hs | 29 +++++++++++++++++++++++++++++ Command/Smudge.hs | 29 +++++++++++++++++++++++++++++ doc/git-annex-clean.mdwn | 36 ++++++++++++++++++++++++++++++++++++ doc/git-annex-smudge.mdwn | 31 +++++++++++++++++++++++++++++++ doc/git-annex.mdwn | 6 ++++++ doc/todo/smudge.mdwn | 4 ++-- 7 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 Command/Clean.hs create mode 100644 Command/Smudge.hs create mode 100644 doc/git-annex-clean.mdwn create mode 100644 doc/git-annex-smudge.mdwn diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs index f585bff3ed..ee31082064 100644 --- a/CmdLine/GitAnnex.hs +++ b/CmdLine/GitAnnex.hs @@ -96,6 +96,8 @@ import qualified Command.Upgrade import qualified Command.Forget import qualified Command.Proxy import qualified Command.DiffDriver +import qualified Command.Smudge +import qualified Command.Clean import qualified Command.Undo import qualified Command.Version #ifdef WITH_ASSISTANT @@ -201,6 +203,8 @@ cmds testoptparser testrunner = , Command.Forget.cmd , Command.Proxy.cmd , Command.DiffDriver.cmd + , Command.Smudge.cmd + , Command.Clean.cmd , Command.Undo.cmd , Command.Version.cmd #ifdef WITH_ASSISTANT diff --git a/Command/Clean.hs b/Command/Clean.hs new file mode 100644 index 0000000000..9af862fb07 --- /dev/null +++ b/Command/Clean.hs @@ -0,0 +1,29 @@ +{- git-annex command + - + - Copyright 2015 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Command.Clean where + +import Common.Annex +import Command +import Annex.Content +import Annex.Link +import Git.Types + +cmd :: Command +cmd = dontCheck repoExists $ + command "clean" SectionPlumbing + "git clean filter" + paramFile (withParams seek) + +seek :: CmdParams -> CommandSeek +seek = withWords start + +start :: [String] -> CommandStart +start [file] = do + error ("clean " ++ file) +start [] = error "clean filter run without filename; upgrade git" +start _ = error "clean filter passed multiple filenames" diff --git a/Command/Smudge.hs b/Command/Smudge.hs new file mode 100644 index 0000000000..22f9efd696 --- /dev/null +++ b/Command/Smudge.hs @@ -0,0 +1,29 @@ +{- git-annex command + - + - Copyright 2015 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Command.Smudge where + +import Common.Annex +import Command +import Annex.Content +import Annex.Link +import Git.Types + +cmd :: Command +cmd = dontCheck repoExists $ + command "smudge" SectionPlumbing + "git smudge filter" + paramFile (withParams seek) + +seek :: CmdParams -> CommandSeek +seek = withWords start + +start :: [String] -> CommandStart +start [file] = do + error ("smudge " ++ file) +start [] = error "smudge filter run without filename; upgrade git" +start _ = error "smudge filter passed multiple filenames" diff --git a/doc/git-annex-clean.mdwn b/doc/git-annex-clean.mdwn new file mode 100644 index 0000000000..13099a5447 --- /dev/null +++ b/doc/git-annex-clean.mdwn @@ -0,0 +1,36 @@ +# NAME + +git-annex clean - git filter driver for git-annex + +# SYNOPSIS + +git annex clean + +# DESCRIPTION + +When git-annex is used as a git filter driver, this command is run +by git commands such as `git add`. It generates a file that +is added to the git repository and points to the git-annex object +containing the content of a large file. + +To configure git to use git-annex as a git filter driver, place the +following in the .gitattributes file: + + * filter=annex + .* !filter + +The annex.largefiles config is consulted to decide if a given file should +be added to git as-is, or if its content are large enough to need to use +git-annex. + +# SEE ALSO + +[[git-annex]](1) + +[[git-annex-smudge]](1) + +# AUTHOR + +Joey Hess + +Warning: Automatically converted into a man page by mdwn2man. Edit with care. diff --git a/doc/git-annex-smudge.mdwn b/doc/git-annex-smudge.mdwn new file mode 100644 index 0000000000..ae28be2c7d --- /dev/null +++ b/doc/git-annex-smudge.mdwn @@ -0,0 +1,31 @@ +# NAME + +git-annex smudge - git filter driver for git-annex + +# SYNOPSIS + +git annex smudge + +# DESCRIPTION + +When git-annex is used as a git filter driver, this command is run +by git commands such as `git checkout` and outputs the content of annexed +objects that pointer files point to. + +To configure git to use git-annex as a git filter driver, place the +following in the .gitattributes file: + + * filter=annex + .* !filter + +# SEE ALSO + +[[git-annex]](1) + +[[git-annex-clean]](1) + +# AUTHOR + +Joey Hess + +Warning: Automatically converted into a man page by mdwn2man. Edit with care. diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index 2020ccf3fd..a8cb73b1b1 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -626,6 +626,12 @@ subdirectories). See [[git-annex-diffdriver]](1) for details. +* `smudge`, `clean` + + These let git-annex be used as a git filter driver. + + See [[git-annex-smudge]](1) and [[git-annex-clean]](1) for details. + * `remotedaemon` Detects when network remotes have received git pushes and fetches from them. diff --git a/doc/todo/smudge.mdwn b/doc/todo/smudge.mdwn index aea0c9b984..094b5f880f 100644 --- a/doc/todo/smudge.mdwn +++ b/doc/todo/smudge.mdwn @@ -177,8 +177,8 @@ Configuration: the annex. Other files are passed through the smudge/clean as-is and have their contents stored in git. -* annex.direct is repurposed to configure how the assistant adds files. - When set to true, they're added unlocked. +* annex.direct is repurposed to configure how git-annex adds files. + When set to false, it adds symlinks and when true it adds pointer files. git-annex clean: