merge: Now also merges synced/master or similar branches, which makes it useful to put in a post-receive hook to make a repository automatically update its working copy when git annex sync or the assistant sync with it.

This commit is contained in:
Joey Hess 2013-07-03 15:42:56 -04:00
parent 3afe7af48b
commit 980e9a15e0
4 changed files with 38 additions and 22 deletions

View file

@ -1,6 +1,6 @@
{- git-annex command {- git-annex command
- -
- Copyright 2011 Joey Hess <joey@kitenet.net> - Copyright 2011, 2013 Joey Hess <joey@kitenet.net>
- -
- Licensed under the GNU GPL version 3 or higher. - Licensed under the GNU GPL version 3 or higher.
-} -}
@ -10,22 +10,29 @@ module Command.Merge where
import Common.Annex import Common.Annex
import Command import Command
import qualified Annex.Branch import qualified Annex.Branch
import qualified Git.Branch
import Command.Sync (mergeLocal)
def :: [Command] def :: [Command]
def = [command "merge" paramNothing seek SectionMaintenance def = [command "merge" paramNothing seek SectionMaintenance
"auto-merge remote changes into git-annex branch"] "automatically merge changes from remotes"]
seek :: [CommandSeek] seek :: [CommandSeek]
seek = [withNothing start] seek =
[ withNothing mergeBranch
, withNothing mergeSynced
]
start :: CommandStart mergeBranch :: CommandStart
start = do mergeBranch = do
showStart "merge" "." showStart "merge" "git-annex"
next perform next $ do
Annex.Branch.update
-- commit explicitly, in case no remote branches were merged
Annex.Branch.commit "update"
next $ return True
perform :: CommandPerform mergeSynced :: CommandStart
perform = do mergeSynced = do
Annex.Branch.update branch <- inRepo Git.Branch.current
-- commit explicitly, in case no remote branches were merged maybe stop mergeLocal branch
Annex.Branch.commit "update"
next $ return True

4
debian/changelog vendored
View file

@ -7,6 +7,10 @@ git-annex (4.20130628) UNRELEASED; urgency=low
by the last run of git annex unused. Supported by fsck, get, move, copy. by the last run of git annex unused. Supported by fsck, get, move, copy.
* get, move, copy: Can now be run in a bare repository, * get, move, copy: Can now be run in a bare repository,
like fsck already could. --all is enabled automatically in this case. like fsck already could. --all is enabled automatically in this case.
* merge: Now also merges synced/master or similar branches, which
makes it useful to put in a post-receive hook to make a repository
automatically update its working copy when git annex sync or the assistant
sync with it.
* webapp: Fix ssh setup with nonstandard port, broken in last release. * webapp: Fix ssh setup with nonstandard port, broken in last release.
-- Joey Hess <joeyh@debian.org> Tue, 02 Jul 2013 15:40:55 -0400 -- Joey Hess <joeyh@debian.org> Tue, 02 Jul 2013 15:40:55 -0400

View file

@ -148,6 +148,15 @@ subdirectories).
Note that sync does not transfer any file contents from or to the remote Note that sync does not transfer any file contents from or to the remote
repositories. repositories.
* merge
This performs the same merging that is done by the sync command, but
without pushing or pulling any data.
One way to use this is to put `git annex merge` into a repository's
post-receive hook. Then any syncs to the repository will update its working
copy automatically.
* addurl [url ...] * addurl [url ...]
Downloads each url to its own file, which is added to the annex. Downloads each url to its own file, which is added to the annex.
@ -401,13 +410,6 @@ subdirectories).
as listed by the last `git annex unused`. The files will have names as listed by the last `git annex unused`. The files will have names
starting with "unused." starting with "unused."
* merge
Automatically merges remote tracking branches */git-annex into
the git-annex branch. While git-annex mostly handles keeping the
git-annex branch merged automatically, if you find you are unable
to push the git-annex branch due non-fast-forward, this will fix it.
* fix [path ...] * fix [path ...]
Fixes up symlinks that have become broken to again point to annexed content. Fixes up symlinks that have become broken to again point to annexed content.

View file

@ -20,9 +20,12 @@ Here's how I set it up. --[[Joey]]
7. Instruct advanced users to clone a http url that ends with the "/.git/" 7. Instruct advanced users to clone a http url that ends with the "/.git/"
directory. For example, for downloads.kitenet.net, the clone url directory. For example, for downloads.kitenet.net, the clone url
is `https://downloads.kitenet.net/.git/` is `https://downloads.kitenet.net/.git/`
8. Set up a git `post-receive` hook that runs `git annex merge`, and
the repository's working tree will automatically be updated when
you run `git annex sync` in a clone that can push to the repository.
(Needs git-annex version 4.20130703 or newer; older versions
can use `git annex sync` in the post-receive hook instead.)
When users clone over http, and run git-annex, it will When users clone over http, and run git-annex, it will
automatically learn all about your repository and be able to download files automatically learn all about your repository and be able to download files
right out of it, also using http. right out of it, also using http.
Enjoy!