From b84da183d3df75362d5b3294d5d29bb599c663aa Mon Sep 17 00:00:00 2001 From: "https://id.koumbit.net/anarcat" Date: Fri, 11 Oct 2013 18:45:50 +0000 Subject: [PATCH 01/21] report this bug properly --- .../addurl_fails_on_the_internet_archive.mdwn | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 doc/bugs/addurl_fails_on_the_internet_archive.mdwn diff --git a/doc/bugs/addurl_fails_on_the_internet_archive.mdwn b/doc/bugs/addurl_fails_on_the_internet_archive.mdwn new file mode 100644 index 0000000000..9277efc90b --- /dev/null +++ b/doc/bugs/addurl_fails_on_the_internet_archive.mdwn @@ -0,0 +1,61 @@ +### 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. :) + +### 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]] From 569cdff18e440015d02138a8435b575be2b2a9a3 Mon Sep 17 00:00:00 2001 From: "https://id.koumbit.net/anarcat" Date: Fri, 11 Oct 2013 18:49:06 +0000 Subject: [PATCH 02/21] Added a comment: still a bug, filed separately! --- .../comment_3_e23cf781c532f80d47d52265f2b2c87e._comment | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 doc/tips/Internet_Archive_via_S3/comment_3_e23cf781c532f80d47d52265f2b2c87e._comment diff --git a/doc/tips/Internet_Archive_via_S3/comment_3_e23cf781c532f80d47d52265f2b2c87e._comment b/doc/tips/Internet_Archive_via_S3/comment_3_e23cf781c532f80d47d52265f2b2c87e._comment new file mode 100644 index 0000000000..3745d544ce --- /dev/null +++ b/doc/tips/Internet_Archive_via_S3/comment_3_e23cf781c532f80d47d52265f2b2c87e._comment @@ -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! +"""]] From a2d3e0f72a5fa92e3f9203dfab0082fffe3eaa37 Mon Sep 17 00:00:00 2001 From: "http://joeyh.name/" Date: Fri, 11 Oct 2013 18:49:25 +0000 Subject: [PATCH 03/21] Added a comment --- ...comment_1_e227aa25eea0b41f1176037a601c5844._comment | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment diff --git a/doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment b/doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment new file mode 100644 index 0000000000..4754b83662 --- /dev/null +++ b/doc/bugs/addurl_fails_on_the_internet_archive/comment_1_e227aa25eea0b41f1176037a601c5844._comment @@ -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. +"""]] From e7a134208c9cc34915e9bfb0183968b397d37348 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 11 Oct 2013 17:33:51 -0400 Subject: [PATCH 04/21] update --- doc/design/assistant/disaster_recovery.mdwn | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/doc/design/assistant/disaster_recovery.mdwn b/doc/design/assistant/disaster_recovery.mdwn index 29db34fc47..c9164880a6 100644 --- a/doc/design/assistant/disaster_recovery.mdwn +++ b/doc/design/assistant/disaster_recovery.mdwn @@ -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 From 8bea6781707febf973a8b8263fa683304f05034f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 11 Oct 2013 17:33:59 -0400 Subject: [PATCH 05/21] devblog --- doc/assistant/fsckconfig.png | Bin 0 -> 59050 bytes doc/devblog/day_32__fsck_config_UI.mdwn | 17 +++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 doc/assistant/fsckconfig.png create mode 100644 doc/devblog/day_32__fsck_config_UI.mdwn diff --git a/doc/assistant/fsckconfig.png b/doc/assistant/fsckconfig.png new file mode 100644 index 0000000000000000000000000000000000000000..81ae755cfdab3fd77fab040e2c65bbbbab5224da GIT binary patch literal 59050 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 literal 0 HcmV?d00001 diff --git a/doc/devblog/day_32__fsck_config_UI.mdwn b/doc/devblog/day_32__fsck_config_UI.mdwn new file mode 100644 index 0000000000..ae98534a1f --- /dev/null +++ b/doc/devblog/day_32__fsck_config_UI.mdwn @@ -0,0 +1,17 @@ +Last night, built this nice user interface for configuring periodic fscks: + +[[!img assistant/fsckconfig.png]] + +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. From 26f08e65e1c1bbd48861628d38ab8645dbec66ab Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 11 Oct 2013 17:38:44 -0400 Subject: [PATCH 06/21] update --- doc/devblog/day_32__fsck_config_UI.mdwn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/devblog/day_32__fsck_config_UI.mdwn b/doc/devblog/day_32__fsck_config_UI.mdwn index ae98534a1f..66f4cfd54f 100644 --- a/doc/devblog/day_32__fsck_config_UI.mdwn +++ b/doc/devblog/day_32__fsck_config_UI.mdwn @@ -2,6 +2,9 @@ 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 From 2c0badc36a34c9a65f66877abb4c56b863958a95 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Fri, 11 Oct 2013 22:00:54 +0000 Subject: [PATCH 07/21] Firefox doesn't seem to like XML-style self-closing --- doc/tips/using_the_web_as_a_special_remote.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tips/using_the_web_as_a_special_remote.mdwn b/doc/tips/using_the_web_as_a_special_remote.mdwn index 4304c0e77e..e04ba800d2 100644 --- a/doc/tips/using_the_web_as_a_special_remote.mdwn +++ b/doc/tips/using_the_web_as_a_special_remote.mdwn @@ -68,7 +68,7 @@ number takes that many paths from the end. ## videos - + There's support for downloading videos from sites like YouTube, Vimeo, and many more. This relies on [quvi](http://quvi.sourceforge.net/) to find From d6702ae54b63c2a6872613bd4c7329677098e8b5 Mon Sep 17 00:00:00 2001 From: "https://id.koumbit.net/anarcat" Date: Sat, 12 Oct 2013 10:07:52 +0000 Subject: [PATCH 08/21] bug fixed in later versions --- doc/bugs/addurl_fails_on_the_internet_archive.mdwn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/bugs/addurl_fails_on_the_internet_archive.mdwn b/doc/bugs/addurl_fails_on_the_internet_archive.mdwn index 9277efc90b..f6740b4651 100644 --- a/doc/bugs/addurl_fails_on_the_internet_archive.mdwn +++ b/doc/bugs/addurl_fails_on_the_internet_archive.mdwn @@ -41,6 +41,8 @@ The second is probably simply that quvi doesn't support the internet archive, an 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 """ From c8ab2f1fced6afa88816a154f968201b5c54e7fe Mon Sep 17 00:00:00 2001 From: "https://id.koumbit.net/anarcat" Date: Sat, 12 Oct 2013 11:23:31 +0000 Subject: [PATCH 09/21] Added a comment: awesome, fix confirmed, and IA+quvi forwarded upstream --- .../comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment diff --git a/doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment b/doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment new file mode 100644 index 0000000000..f24d0583f1 --- /dev/null +++ b/doc/bugs/addurl_fails_on_the_internet_archive/comment_2_6d4fd58f0caa1f75ee2dd3f0a909cd91._comment @@ -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... +"""]] From 3bd3c62c0fd290f071437b6f538afb5e3253a44c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 12 Oct 2013 12:08:18 -0400 Subject: [PATCH 10/21] updated android gpg version --- standalone/android/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/standalone/android/Makefile b/standalone/android/Makefile index 4d15bc38b7..1a2ef0f1a3 100644 --- a/standalone/android/Makefile +++ b/standalone/android/Makefile @@ -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 From 13649750b8c0868475b15b0b6d084fc313c5b74d Mon Sep 17 00:00:00 2001 From: "https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg" Date: Sat, 12 Oct 2013 20:13:39 +0000 Subject: [PATCH 11/21] --- ...icting_directory-file_of_direct_repos.mdwn | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn new file mode 100644 index 0000000000..9c315b8dc2 --- /dev/null +++ b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn @@ -0,0 +1,194 @@ +### Please describe the problem. +Data loss due to incorrect merge of repos in direct mode. + +Given 2 repos A and B, in direct mode, where a has no remotes and b has a as remote (not sure if the latter is relevant): +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. + +### 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 +Date: Sat Oct 12 15:11:47 2013 +0200 + + git-annex automatic merge conflict fix + +commit 5a8942a9a1735cb313c1f6624cbd3f48b252d9d9 +Author: timdiels +Date: Sat Oct 12 15:11:47 2013 +0200 + + git-annex automatic sync + + create mode 120000 f + +commit ad6802dc231d389b86154e2df900a70b18e17b29 +Author: timdiels +Date: Sat Oct 12 15:11:40 2013 +0200 + + git-annex automatic sync + + create mode 120000 f/f + +commit 2a8fa45bea996ab5ae219a017d4b642153e6d9c9 +Author: timdiels +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 +Date: Sat Oct 12 15:11:47 2013 +0200 + + git-annex automatic merge conflict fix + +commit 5a8942a9a1735cb313c1f6624cbd3f48b252d9d9 +Author: timdiels +Date: Sat Oct 12 15:11:47 2013 +0200 + + git-annex automatic sync + + create mode 120000 f + +commit ad6802dc231d389b86154e2df900a70b18e17b29 +Author: timdiels +Date: Sat Oct 12 15:11:40 2013 +0200 + + git-annex automatic sync + + create mode 120000 f/f + +commit 2a8fa45bea996ab5ae219a017d4b642153e6d9c9 +Author: timdiels +Date: Sat Oct 12 15:09:40 2013 +0200 + + git-annex automatic sync + + create mode 120000 firstfile + +"""]] From 03fc341dcb2687f09efe4021b0160722e09bde7b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 12 Oct 2013 19:27:35 -0400 Subject: [PATCH 12/21] close --- doc/bugs/addurl_fails_on_the_internet_archive.mdwn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/bugs/addurl_fails_on_the_internet_archive.mdwn b/doc/bugs/addurl_fails_on_the_internet_archive.mdwn index 9277efc90b..0a74a08477 100644 --- a/doc/bugs/addurl_fails_on_the_internet_archive.mdwn +++ b/doc/bugs/addurl_fails_on_the_internet_archive.mdwn @@ -59,3 +59,5 @@ git-annex: addurl: 1 failed """]] Originally reported in [[tips/Internet_Archive_via_S3]]. --[[anarcat]] + +> [[done]] --[[Joey]] From ea5248d469c6ed045c3a78749808b086d2520de1 Mon Sep 17 00:00:00 2001 From: "http://joeyh.name/" Date: Sat, 12 Oct 2013 23:31:17 +0000 Subject: [PATCH 13/21] Added a comment --- ...comment_4_0759644baf26b75f4e48dbb387d725a5._comment | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 doc/devblog/day_27__locking_fun/comment_4_0759644baf26b75f4e48dbb387d725a5._comment diff --git a/doc/devblog/day_27__locking_fun/comment_4_0759644baf26b75f4e48dbb387d725a5._comment b/doc/devblog/day_27__locking_fun/comment_4_0759644baf26b75f4e48dbb387d725a5._comment new file mode 100644 index 0000000000..cbeae8b78f --- /dev/null +++ b/doc/devblog/day_27__locking_fun/comment_4_0759644baf26b75f4e48dbb387d725a5._comment @@ -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.. +"""]] From 8a03566099ab9aafddec38d21706a1be4ac2a7c3 Mon Sep 17 00:00:00 2001 From: RaspberryPie Date: Sun, 13 Oct 2013 06:33:25 +0000 Subject: [PATCH 14/21] Added a comment --- ...comment_5_05c84dde377298adfd3fc20749b3108f._comment | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 doc/forum/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment diff --git a/doc/forum/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment b/doc/forum/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment new file mode 100644 index 0000000000..61af9e9dfb --- /dev/null +++ b/doc/forum/git-annex:_status:_1_failed/comment_5_05c84dde377298adfd3fc20749b3108f._comment @@ -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. +"""]] From 1d4f1d51708eec30dbffaac63c9b01baf175fd36 Mon Sep 17 00:00:00 2001 From: "https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg" Date: Sun, 13 Oct 2013 08:56:02 +0000 Subject: [PATCH 15/21] --- ...t_merge_upon_conflicting_directory-file_of_direct_repos.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn index 9c315b8dc2..245def940a 100644 --- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn +++ b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn @@ -1,7 +1,7 @@ ### Please describe the problem. Data loss due to incorrect merge of repos in direct mode. -Given 2 repos A and B, in direct mode, where a has no remotes and b has a as remote (not sure if the latter is relevant): +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 From 8c41f6a7ddb7f129e6ff4ccb29824207b98709c5 Mon Sep 17 00:00:00 2001 From: "https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg" Date: Sun, 13 Oct 2013 09:04:52 +0000 Subject: [PATCH 16/21] --- ...erge_upon_conflicting_directory-file_of_direct_repos.mdwn | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn index 245def940a..69364ae63b 100644 --- a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn +++ b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos.mdwn @@ -1,13 +1,16 @@ ### Please describe the problem. -Data loss due to incorrect merge of repos in direct mode. +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. From 00b18987a41023da3c158712a5bf112e0a512e64 Mon Sep 17 00:00:00 2001 From: "https://www.google.com/accounts/o8/id?id=AItOawlWskoNgUB7r70OXglR-4iKI4bOuPJb-xg" Date: Sun, 13 Oct 2013 12:35:50 +0000 Subject: [PATCH 17/21] Added a comment --- ...comment_1_294c33af08649256908a97894f93c05d._comment | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment diff --git a/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment new file mode 100644 index 0000000000..1b22d2ce53 --- /dev/null +++ b/doc/bugs/data_loss:_incorrect_merge_upon_conflicting_directory-file_of_direct_repos/comment_1_294c33af08649256908a97894f93c05d._comment @@ -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. +"""]] From 234c29b9d779148fb32060f6e095ed01fca73064 Mon Sep 17 00:00:00 2001 From: "https://www.google.com/accounts/o8/id?id=AItOawkUwqII7LhbatqAQY1T5ZZOdPEFcQJKG6I" Date: Sun, 13 Oct 2013 16:14:35 +0000 Subject: [PATCH 18/21] Added a comment --- ..._948c40f1e46ca220d61365aebcd4f6d7._comment | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 doc/forum/bash_completion/comment_3_948c40f1e46ca220d61365aebcd4f6d7._comment diff --git a/doc/forum/bash_completion/comment_3_948c40f1e46ca220d61365aebcd4f6d7._comment b/doc/forum/bash_completion/comment_3_948c40f1e46ca220d61365aebcd4f6d7._comment new file mode 100644 index 0000000000..fbe659164e --- /dev/null +++ b/doc/forum/bash_completion/comment_3_948c40f1e46ca220d61365aebcd4f6d7._comment @@ -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 + } + +"""]] From 68518a9b3d40e7faea6d58d3e8cdf5e1635be0ae Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 13 Oct 2013 13:30:24 -0400 Subject: [PATCH 19/21] status: Fix a crash if a temp file went away while its size was being checked for status. --- Command/Status.hs | 7 ++++--- debian/changelog | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Command/Status.hs b/Command/Status.hs index 89d08c7947..e1ace00522 100644 --- a/Command/Status.hs +++ b/Command/Status.hs @@ -371,10 +371,11 @@ staleSize label dirspec = go =<< lift (Command.Unused.staleKeys 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 ++ ")" diff --git a/debian/changelog b/debian/changelog index 853f9a8547..d558b83ae5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Thu, 03 Oct 2013 15:41:24 -0400 From e80993580935e6f7af4c4dde2fb1bb80ed3f5455 Mon Sep 17 00:00:00 2001 From: "http://joeyh.name/" Date: Sun, 13 Oct 2013 17:35:20 +0000 Subject: [PATCH 20/21] Added a comment --- ...omment_6_bb5141e29c665bc0bb82611ea27d4be8._comment | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 doc/forum/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment diff --git a/doc/forum/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment b/doc/forum/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment new file mode 100644 index 0000000000..ab720b6ce5 --- /dev/null +++ b/doc/forum/git-annex:_status:_1_failed/comment_6_bb5141e29c665bc0bb82611ea27d4be8._comment @@ -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. +"""]] From ee2020bdc79a7c4bae08bb3c0e5b9ec581560123 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 13 Oct 2013 14:19:58 -0400 Subject: [PATCH 21/21] fix build w/o webdav --- Assistant/WebApp/Configurators/WebDAV.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assistant/WebApp/Configurators/WebDAV.hs b/Assistant/WebApp/Configurators/WebDAV.hs index 6dd5b6ffb7..6bf7c1cc78 100644 --- a/Assistant/WebApp/Configurators/WebDAV.hs +++ b/Assistant/WebApp/Configurators/WebDAV.hs @@ -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)