Merge branch 'master' into incrementalfsck

This commit is contained in:
Joey Hess 2013-10-13 15:05:44 -04:00
commit a1040a38c5
18 changed files with 505 additions and 9 deletions

View file

@ -18,7 +18,6 @@ import qualified Remote
import Types.Remote (RemoteConfig)
import Types.StandardGroups
import Logs.Remote
import Assistant.Gpg
import Assistant.WebApp.Utility
import Git.Remote
@ -26,6 +25,7 @@ import qualified Data.Map as M
#endif
import qualified Data.Text as T
import Network.URI
import Assistant.Gpg
webDAVConfigurator :: Widget -> Handler Html
webDAVConfigurator = page "Add a WebDAV repository" (Just Configuration)

View file

@ -371,10 +371,11 @@ staleSize label dirspec = go =<< lift (dirKeys dirspec)
onsize size = stat label $
json (++ aside "clean up with git-annex unused") $
return $ roughSize storageUnits False size
keysizes keys = map (fromIntegral . fileSize) <$> stats keys
stats keys = do
keysizes keys = do
dir <- lift $ fromRepo dirspec
liftIO $ forM keys $ \k -> getFileStatus (dir </> keyFile k)
liftIO $ forM keys $ \k -> catchDefaultIO 0 $
fromIntegral . fileSize
<$> getFileStatus (dir </> keyFile k)
aside :: String -> String
aside s = " (" ++ s ++ ")"

2
debian/changelog vendored
View file

@ -15,6 +15,8 @@ git-annex (4.20131003) UNRELEASED; urgency=low
* Remove bogus runshell loop check.
* addurl: Improve message when adding url with wrong size to existing file.
* Fixed handling of URL keys that have no recorded size.
* status: Fix a crash if a temp file went away while its size was
being checked for status.
-- Joey Hess <joeyh@debian.org> Thu, 03 Oct 2013 15:41:24 -0400

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -0,0 +1,65 @@
### Please describe the problem.
`addurl` doesn't support the internet archive:
1. it doesn't actually accept the proper URL as a secondary source of content
2. it doesn't parse the HTML from the video page (the "details page")
### What steps will reproduce the problem?
# download eben moglen's excellent re:publica presentation from youtube
git annex addurl https://www.youtube.com/watch?v=sKOk4Y4inVY
# copy that file aside
cp -L re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm-bak
# drop it so we can try again
git annex drop re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
# add the IA URL for the same video, failing
git annex addurl --file=re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
# try again with --relaxed to skip some checks
git annex addurl --relaxed --file=re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
# observe both files are the same size and checksum
The files should look like this:
[[!format txt """
anarcat@angela:presentations$ ls -alL re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm*
-r--r--r-- 1 anarcat anarcat 419359123 oct 9 23:41 re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
-r--r--r-- 1 anarcat anarcat 419359123 oct 11 19:40 re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm-bak
anarcat@angela:presentations$ md5sum re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm*
7892df24a9e1c40e2587be1035728ef0 re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
7892df24a9e1c40e2587be1035728ef0 re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm-bak
"""]]
There are two separate bugs here: one is the above need to use --relaxed even though the file is the same.
The second is probably simply that quvi doesn't support the internet archive, and maybe that one should be moved to a separate [[todo]]/[[wishlist]]. I was expecting this to "do the right thing" (ie. download the video):
git annex addurl http://archive.org/details/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia
... but instead it downloads the HTML.
### What version of git-annex are you using? On what operating system?
my good old faithful `4.20130921-g434dc22` i compiled manually some time ago. :)
This is [[done]] in git-annex version: 4.20131011-g2c0badc. Thanks!
### Please provide any additional information below.
[[!format sh """
anarcat@marcos:presentations$ git annex addurl --file=re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm http://archive.org/download/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
addurl re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
failed to verify url exists: http://archive.org/download/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
failed
git-annex: addurl: 1 failed
anarcat@marcos:presentations$ git annex addurl --debug --file=re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
[2013-10-09 18:26:30 EDT] call: quvi ["-v","mute","--support","http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm"]
addurl re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm [2013-10-09 18:26:30 EDT] read: curl ["-s","--head","-L","http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm","-w","%{http_code}"]
failed to verify url exists: http://ia601009.us.archive.org/9/items/Republica2012-EbenMoglen-FreedomOfThoughtRequiresFreeMedia/re_publica_2012___Eben_Moglen___Freedom_of_Thought_Requires_Free_Media.webm
failed
git-annex: addurl: 1 failed
"""]]
Originally reported in [[tips/Internet_Archive_via_S3]]. --[[anarcat]]
> [[done]] --[[Joey]]

View file

@ -0,0 +1,10 @@
[[!comment format=mdwn
username="http://joeyh.name/"
ip="4.154.4.22"
subject="comment 1"
date="2013-10-11T18:49:25Z"
content="""
Afaik this was fixed in 747f5b123cb3c6b3b87d4e79f8767e69d842b96b.
Probably noone has bothered to add IA support to quvi, but it should be doable.
"""]]

View file

@ -0,0 +1,8 @@
[[!comment format=mdwn
username="https://id.koumbit.net/anarcat"
ip="72.0.72.144"
subject="awesome, fix confirmed, and IA+quvi forwarded upstream"
date="2013-10-12T11:23:31Z"
content="""
Great! I confirm latest versions work properly.. I have [written the quvi-devel mailing list](http://sourceforge.net/mailarchive/forum.php?thread_name=20131012104904.GA11972%40angela.anarcat.ath.cx&forum_name=quvi-devel) to ask for help for archive.org support, we'll see where it goes...
"""]]

View file

@ -0,0 +1,197 @@
### Please describe the problem.
Data loss due to incorrect merge of repos in direct mode. (I tested the same scenario in indirect mode and it worked fine there)
Given 2 repos A and B, in direct mode:
1. in A: mkdir f, with a file f in it
2. in B: touch f
3. in B: sync
Result: Only an f.variant-f###remains, which is file f of B, and the merge conflict has already been automatically resolved. I.e. Directory f containing file f, is lost.
Expected result: remaining contents: f.variant-AAA which is file f of B, f.variant-BBB which is directory f of A, containing a file f. Merge conflict marked resolved.
### What steps will reproduce the problem?
Execute the script given below in additional information.
### What version of git-annex are you using?
git-annex version: 4.20130911-g6625d0e
build flags: Assistant Webapp Pairing Testsuite S3 WebDAV Inotify DBus XMPP Feeds Quvi
### On what operating system?
Linux basementcat 3.10.10-1-ARCH #1 SMP PREEMPT Fri Aug 30 11:30:06 CEST 2013 x86_64 GNU/Linux
### Please provide any additional information below.
[[!format sh """
[~]$ mkdir test
[~/test]$ mkdir a
[~/test/a]$ git init
Initialized empty Git repository in /home/limyreth/test/a/.git/
[~/test/a]$ git annex init test
init test ok
(Recording state in git...)
[~/test/a]$ touch firstfile
[~/test/a]$ git annex add firstfile
add firstfile (checksum...) ok
(Recording state in git...)
[~/test/a]$ git annex sync
commit
ok
git-annex: no branch is checked out
[~]$ git clone test/a
Cloning into 'a'...
done.
[~]$ mv a test/b
[~/test/a]$ git annex direct
commit
# On branch master
nothing to commit, working directory clean
ok
direct firstfile ok
direct ok
[~/test/a]$ ls -l
total 0
-rw-r--r-- 1 limyreth users 0 Oct 12 15:09 firstfile
[~/test/a]$ mkdir f
[~/test/a]$ touch f/f
[~/test/a]$ git annex add f/f
add f/f (checksum...) ok
(Recording state in git...)
[~/test/a]$ git annex sync
commit
ok
[~/test/b]$ git remote -v
origin /home/limyreth/test/a (fetch)
origin /home/limyreth/test/a (push)
[~/test/b]$ ls
firstfile
[~/test/b]$ git annex direct
commit
(Recording state in git...)
# On branch master
nothing to commit, working directory clean
ok
direct ok
[~/test/b]$ touch f
[~/test/b]$ git annex add f
add f (checksum...) ok
(Recording state in git...)
[~/test/b]$ git annex sync
(merging origin/git-annex into git-annex...)
(Recording state in git...)
commit
ok
pull origin
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 9 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /home/limyreth/test/a
2a8fa45..ad6802d master -> origin/master
1f39016..19e3e12 git-annex -> origin/git-annex
* [new branch] synced/master -> origin/synced/master
Adding f/f
CONFLICT (file/directory): There is a directory with name f in refs/remotes/origin/master. Adding f as f~HEAD
Automatic merge failed; fix conflicts and then commit the result.
f: needs merge
(Recording state in git...)
ok
[master 37a8019] git-annex automatic merge conflict fix
Already up-to-date.
ok
(merging origin/git-annex into git-annex...)
(Recording state in git...)
push origin
Counting objects: 36, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (25/25), 2.16 KiB | 0 bytes/s, done.
Total 25 (delta 5), reused 0 (delta 0)
To /home/limyreth/test/a
ad6802d..37a8019 master -> synced/master
* [new branch] git-annex -> synced/git-annex
ok
[~/test/b]$ ls -l
total 0
-rw-r--r-- 1 limyreth users 0 Oct 12 15:11 firstfile
-rw-r--r-- 1 limyreth users 0 Oct 12 15:11 f.variant-f874
[~/test/b]$ git log --summary
commit 37a80199abe3cf82100bbdb5dd2217ed6bcb4b62
Merge: 5a8942a ad6802d
Author: timdiels <timdiels.m@gmail.com>
Date: Sat Oct 12 15:11:47 2013 +0200
git-annex automatic merge conflict fix
commit 5a8942a9a1735cb313c1f6624cbd3f48b252d9d9
Author: timdiels <timdiels.m@gmail.com>
Date: Sat Oct 12 15:11:47 2013 +0200
git-annex automatic sync
create mode 120000 f
commit ad6802dc231d389b86154e2df900a70b18e17b29
Author: timdiels <timdiels.m@gmail.com>
Date: Sat Oct 12 15:11:40 2013 +0200
git-annex automatic sync
create mode 120000 f/f
commit 2a8fa45bea996ab5ae219a017d4b642153e6d9c9
Author: timdiels <timdiels.m@gmail.com>
Date: Sat Oct 12 15:09:40 2013 +0200
git-annex automatic sync
create mode 120000 firstfile
[~/test/a]$ git annex sync
(merging synced/git-annex into git-annex...)
commit
ok
merge synced/master
Updating ad6802d..37a8019
Fast-forward
f.variant-f874 | 1 +
f/f | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
create mode 120000 f.variant-f874
delete mode 120000 f/f
ok
[~/test/a]$ git log --summary
commit 37a80199abe3cf82100bbdb5dd2217ed6bcb4b62
Merge: 5a8942a ad6802d
Author: timdiels <timdiels.m@gmail.com>
Date: Sat Oct 12 15:11:47 2013 +0200
git-annex automatic merge conflict fix
commit 5a8942a9a1735cb313c1f6624cbd3f48b252d9d9
Author: timdiels <timdiels.m@gmail.com>
Date: Sat Oct 12 15:11:47 2013 +0200
git-annex automatic sync
create mode 120000 f
commit ad6802dc231d389b86154e2df900a70b18e17b29
Author: timdiels <timdiels.m@gmail.com>
Date: Sat Oct 12 15:11:40 2013 +0200
git-annex automatic sync
create mode 120000 f/f
commit 2a8fa45bea996ab5ae219a017d4b642153e6d9c9
Author: timdiels <timdiels.m@gmail.com>
Date: Sat Oct 12 15:09:40 2013 +0200
git-annex automatic sync
create mode 120000 firstfile
"""]]

View file

@ -0,0 +1,10 @@
[[!comment format=mdwn
username="https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg"
nickname="Tim"
subject="comment 1"
date="2013-10-13T12:35:47Z"
content="""
I've just tested a similar scenario with 2 conflicting files, a file-file conflict, and then it works fine. That makes sense, as there's a test written for that.
So the specific bits are: directory-file conflict of repos in direct mode.
"""]]

View file

@ -24,7 +24,7 @@ check that nothing else is using it, fix the problem, and redo the commit.
## incremental fsck
TODO: Add webapp UI to enable incremental fsck
Add webapp UI to enable incremental fsck **done**
Of course, incremental fsck will run as an niced (and ioniced) background
job. There will need to be a button in the webapp to stop it, in case it's
@ -33,8 +33,16 @@ annoying. **done**
When fsck finds a damanged file, queue a download of the file from a
remote. **done**
TODO: If no accessible remote has the file, prompt the user to eg, connect
a drive containing it
TODO: If no accessible remote has a file that fsck reported missing,
prompt the user to eg, connect a drive containing it. Or perhaps this is a
special case of a general problem, and the webapp should prompt the user
when any desired file is available on a remote that's not mounted?
TODO: Detect when a removable drive is connected in the Cronner, and check
and try to run its remote fsck jobs.
TODO: git-annex-shell fsck support, which would allow cheap fast fscks
of ssh remotes.
## git-annex-shell remote fsck

View file

@ -0,0 +1,10 @@
[[!comment format=mdwn
username="http://joeyh.name/"
ip="4.154.4.22"
subject="comment 4"
date="2013-10-12T23:31:16Z"
content="""
Git simply creates a file as a lock file, and does not use any form of locking on it, so if the git process dies for any reason before it gets a chance to remove the lock file, a stale lock file remains, and future git commands will fall over it.
It's really surprisingly bad..
"""]]

View file

@ -0,0 +1,20 @@
Last night, built this nice user interface for configuring periodic fscks:
[[!img assistant/fsckconfig.png]]
Rather happy that that whole UI needed only 140 lines of code to build.
Though rather more work behind it, as seen in this blog..
Today I added some support to git-annex for smart fscking of remotes.
So far only git repos on local drives, but this should get extended to
git-annex-shell for ssh remotes. The assistant can also run periodic fscks
of these.
Still need to test that, and find a way to make a removable drive's fsck
job run when the drive gets plugged in. That's where picking "any time"
will be useful; it'll let you configure fscking of removable drives when
they're available, as long as they have not been fscked too recently.
----
Today's work was sponsored by Georg Bauer.

View file

@ -0,0 +1,136 @@
[[!comment format=mdwn
username="https://www.google.com/accounts/o8/id?id=AItOawkUwqII7LhbatqAQY1T5ZZOdPEFcQJKG6I"
nickname="Rafael"
subject="comment 3"
date="2013-10-13T16:14:34Z"
content="""
This code needs the bash-completion file for git by Shawn O. Pearce, I think it is distributed by default on debian. Any feed-back or improvement is welcome! I'm far from expert, use at your own risks.
#!bash
#
# bash completion support for git-annex
# depends on git completion file (by Shawn O. Pearce):
[ -n \"$__git_whitespacelist\" ] || . $BASH_COMPLETION_DIR/git
# almost copy of __git_aliased_command
# requires 2 arguments: alias and main command (after git)
__git_aliased_subcommand ()
{
local word cmdline=$(git --git-dir=\"$(__gitdir)\" \
config --get \"alias.$1\")
for word in $cmdline; do
case \"$word\" in
\!*) : shell command alias ;;
-*) : option ;;
*=*) : setting env ;;
git) : git itself ;;
\"$2\") : main command
local found=1 ;;
*)
[ -n \"${found-}\" ] && echo \"$word\"
return
esac
done
}
_git_annex ()
{
_get_comp_words_by_ref -n =: cur words
# $ git annex 2>&1 |sed '1,6d '|grep -v '^$'|grep -v 'commands:$'|cut -c1-12
local subcommands=\"
add addurl assistant copy drop edit get import importfeed lock
mirror move rmurl sync unlock watch webapp content dead describe
direct enableremote group indirect init initremote semitrust
trust ungroup untrust vicfg addunused dropunused fix forget fsck
merge unused upgrade find help list log map status version
whereis migrate reinject unannex uninit dropkey
\"
# plumbing (to complete?): fromkey fuzztest pre-commit rekey test
# transferkey transferkeys xmppgit
local subcommand=\"$(__git_find_on_cmdline \"$subcommands\")\"
if [ -z \"$subcommand\" ]; then
## search for aliased subcommand
## works only if the alias is invoked just after git
## (simpler, cf _git function)
local maybesubcom maybealias=${words[1]}
[ -n \"$maybealias\" ] && # false with a bash alias='git annex'
[ \"${maybealias:0:1}\" != '-' ] &&
maybesubcom=$(__git_aliased_subcommand \"$maybealias\" annex)
for subcommand in $subcommands \"\"; do
[ \"$maybesubcom\" = \"$subcommand\" ] && break
done
[ -z \"$subcommand\" ] &&
__gitcomp \"$subcommands\" &&
return
fi
case \"$cur\" in
--from=*|--to=*|--trust=*|--semitrust=*|--untrust=*|--in=*)
__gitcomp \"here $(__git_remotes)\" \"\" \"${cur##*=}\"
;;
--*)
__gitcomp \"
--force --fast --auto --all --unused --quiet --verbose --json --debug
--no-debug --from= --to= --numcopies= --time-limit= --trust= --semitrust=
--untrust= --trust-glacier-inventory --backend= --format= --user-agent=
--exclude= --include= --in= --copies= --inbackend= --inallgroup=
--smallerthan= --largerthan= --not --and --or
\"
;;
# -*)
# __gitcomp \"-( -) -c\"
# ;;
*)
case \"$subcommand\" in
# subcommands with PATH (currently outputs wrongly \"uninit\",
# and not \"reinject\")
# $ tr ' ' '|' <<< $(git annex 2>&1 |sed '1,6d '|grep -v '^$' | \
# grep -v 'commands:$'|grep PATH |cut -c1-12)
add|copy|drop|edit|get|import|lock|mirror|move|unlock|fix| \
fsck|find|list|log|status|whereis|migrate|unannex| \
fromkey|pre-commit|rekey|reinject)
COMPREPLY=() # complete with paths
;;
addurl|importfeed|rmurl) # URL commands
COMPREPLY=() # at least works with file://...
;;
init|uninit|unused|merge|status|map|upgrade|version|assistant| \
watch|webapp|direct|indirect|vicfg|forget|help) # | plumbing...
COMPREPLY= # no more args expected
# is 'COMPREPLY=' correct? (seems not standard practice...)
;;
describe|trust|untrust|semitrust|sync|content|dead|group|ungroup)
__gitcomp \"here $(__git_remotes)\"
# TODO: handle git-annex special remotes
;;
initremote|enableremote)
case \"$cur\" in
type=*)
__gitcomp \"S3 bup directory rsync gcrypt webdav\" \"\" \"${cur##type=}\"
;;
encryption=*)
__gitcomp \"none hybrid shared pubkey\" \"\" \"${cur##encryption=}\"
;;
buprepo=|directory=|rsyncurl=)
COMPREPLY=()
# use COMPREPLY (and compgen below) directly because
# __gitcomp does not handle '*=*' pattern, only '--*=*'
# Writing a __gitannexcomp function may be worth it.
;;
*)
local initremoteopts=\"
type= encryption= buprepo= directory= rsyncurl= \"
COMPREPLY=($(compgen -W \"$initremoteopts \" -- \"$cur\"))
;;
esac
;;
esac
;;
esac
}
"""]]

View file

@ -0,0 +1,10 @@
[[!comment format=mdwn
username="RaspberryPie"
ip="213.61.149.100"
subject="comment 5"
date="2013-10-13T06:33:24Z"
content="""
I use v4.20130909 and get the same error when running `git-annex status`. Does it matter that my filename in question is shown to have two dashes (--) at the end, just as in OP's case? Other files in .git/annex/tmp only have one dash at the end.
Joey, I straced the command and sent the output to your kitenet e-mail address. Hope it helps.
"""]]

View file

@ -0,0 +1,11 @@
[[!comment format=mdwn
username="http://joeyh.name/"
ip="4.154.4.22"
subject="comment 6"
date="2013-10-13T17:35:20Z"
content="""
What is the last line printed before this error message?
My preliminary analysis is that it is checking the sizes of stale files in .git/annex/tmp, and could fail if a temp file was deleted just as it was running.
But if so it would be unlikely to happen every time `git annex status` is run. Or even if it did happen every time (perhaps because you appear to be running the git-annex assistant and it might be adding a lot of files in the background), the filename in the error message would be different every time. I have just committed a fix for that problem to git, but am not 100% sure it's really the problem that you're seeing.
"""]]

View file

@ -0,0 +1,8 @@
[[!comment format=mdwn
username="https://id.koumbit.net/anarcat"
ip="72.0.72.144"
subject="still a bug, filed separately!"
date="2013-10-11T18:49:06Z"
content="""
Aaah, of course, sorry for the noise here. It turns out that this is *not* because the filesize (or even the checksum, for that matter) are different, so there's clearly a bug there, and i filed it in [[bugs/addurl_fails_on_the_internet_archive]]. Thanks!
"""]]

View file

@ -68,7 +68,7 @@ number takes that many paths from the end.
## videos
<a name=quvi />
<a name=quvi></a>
There's support for downloading videos from sites like YouTube, Vimeo,
and many more. This relies on [quvi](http://quvi.sourceforge.net/) to find

View file

@ -114,7 +114,7 @@ $(GIT_ANNEX_ANDROID_SOURCETREE)/rsync/build-stamp: rsync.patch
touch $@
$(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg/build-stamp:
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg && git checkout gnupg-1.4.13
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg && git checkout gnupg-1.4.15
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg && ./autogen.sh
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg && ./configure --host=arm-linux-androideabi --disable-gnupg-iconv --disable-card-support --disable-agent-support --disable-photo-viewers --disable-keyserver-helpers --disable-nls
cd $(GIT_ANNEX_ANDROID_SOURCETREE)/gnupg; $(MAKE) || true # expected failure in doc build