diff --git a/doc/bugs/get_from_exporttree_remote_sometimes_fails.mdwn b/doc/bugs/get_from_exporttree_remote_sometimes_fails.mdwn new file mode 100644 index 0000000000..f2b6bed039 --- /dev/null +++ b/doc/bugs/get_from_exporttree_remote_sometimes_fails.mdwn @@ -0,0 +1,82 @@ +I have a case where `whereis` knows that a file is present in an exporttree +remote, but `get` fails: + + joey@darkstar:/tmp/bench/repoclone>git annex whereis bar + whereis bar (1 copy) + b1a73a91-5f79-4b4b-b838-683e602b2888 -- joey@darkstar:/tmp/bench/repo + + The following untrusted locations may also have copies: + 163219a6-fdc1-4d3e-98a6-7aed3e9d605d -- [dir] + ok + joey@darkstar:/tmp/bench/repoclone>git annex get bar + get bar + Unable to access these remotes: dir + + Try making some of these repositories available: + 163219a6-fdc1-4d3e-98a6-7aed3e9d605d -- [dir] + b1a73a91-5f79-4b4b-b838-683e602b2888 -- joey@darkstar:/tmp/bench/repo + failed + git-annex: get: 1 failed + - exit 1 + +Reproducible with git-annex 7.20181106-g58d1b2510 using this script. + +It looks like the export database is not getting updated to reflect the +export that was made in the other clone of the repository. + + joey@darkstar:/tmp/bench/repoclone>echo .dump | sqlite3 .git/annex/export/163219a6-fdc1-4d3e-98a6-7aed3e9d605d/db/db + PRAGMA foreign_keys=OFF; + BEGIN TRANSACTION; + CREATE TABLE IF NOT EXISTS "exported"("id" INTEGER PRIMARY KEY,"key" VARCHAR NOT NULL,"file" VARCHAR NOT NULL,CONSTRAINT "exported_index" UNIQUE ("key","file")); + INSERT INTO exported VALUES(1,'SHA1--257cc5642cb1a054f08cc83f2d943e56fd3ebe99','foo'); + CREATE TABLE IF NOT EXISTS "exported_directory"("id" INTEGER PRIMARY KEY,"subdir" VARCHAR NOT NULL,"file" VARCHAR NOT NULL,CONSTRAINT "exported_directory_index" UNIQUE ("subdir","file")); + CREATE TABLE IF NOT EXISTS "export_tree"("id" INTEGER PRIMARY KEY,"key" VARCHAR NOT NULL,"file" VARCHAR NOT NULL,CONSTRAINT "export_tree_index" UNIQUE ("key","file")); + INSERT INTO export_tree VALUES(1,'SHA1--257cc5642cb1a054f08cc83f2d943e56fd3ebe99','foo'); + CREATE TABLE IF NOT EXISTS "export_tree_current"("id" INTEGER PRIMARY KEY,"tree" VARCHAR NOT NULL,CONSTRAINT "unique_tree" UNIQUE ("tree")); + INSERT INTO export_tree_current VALUES(1,'205f6b799e7d5c2524468ca006a0131aa57ecce7'); + COMMIT; + +--[[Joey]] + +
+#!/bin/sh +set -e +mkdir /tmp/bench +cd /tmp/bench +mkdir d +git init repo +cd repo +git annex init +echo foo > foo +git add foo +git commit -m add +git annex initremote dir type=directory directory=../d encryption=none exporttree=yes +cd .. +git clone repo repoclone +cd repoclone +git annex enableremote dir directory=../d +set +e +git-annex export --tracking master --to dir +echo "above expected to fail as foo's content is not present" +set -e +cd ../repo +git-annex export --tracking master --to dir +cd ../repoclone +git fetch +git annex whereis foo +git annex get foo +git-annex export --tracking master --to dir + +cd ../repo +echo bar > bar +git annex add +git commit -m add +git-annex export --tracking master --to dir + +cd ../repoclone +git fetch +git merge +git annex whereis bar +git remote rm origin +git annex get bar +