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

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.
* get, move, copy: Can now be run in a bare repository,
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.
-- 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
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 ...]
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
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 ...]
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/"
directory. For example, for downloads.kitenet.net, the clone url
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
automatically learn all about your repository and be able to download files
right out of it, also using http.
Enjoy!