From 06e996efad927205aca97bf85e3ccefaf99645b0 Mon Sep 17 00:00:00 2001 From: kyle Date: Thu, 6 May 2021 15:23:07 +0000 Subject: [PATCH] patch: fromkey: create directory for pointer files too --- ...e_directories_for_pointer_files__63__.mdwn | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 doc/bugs/fromkey__58___create_directories_for_pointer_files__63__.mdwn diff --git a/doc/bugs/fromkey__58___create_directories_for_pointer_files__63__.mdwn b/doc/bugs/fromkey__58___create_directories_for_pointer_files__63__.mdwn new file mode 100644 index 0000000000..62cafdb629 --- /dev/null +++ b/doc/bugs/fromkey__58___create_directories_for_pointer_files__63__.mdwn @@ -0,0 +1,93 @@ +Thanks for extending `fromkey` to support for unlocked files. When +updating some DataLad code to make use of this, a test flagged a +difference between how links and pointer files are handled: the +necessary leading directories will be created for links but not +pointer files. + +[[!format sh """ +cd "$(mktemp -d "${TMPDIR:-/tmp}"/ga-XXXXXXX)" || exit 1 + +git version +git annex version | head -1 + +git init -q +git annex init + +set -x + +git annex fromkey --force \ + SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c \ + foo/a +git cat-file -p :foo/a + +git config annex.addunlocked true +git annex fromkey --force \ + SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730 \ + bar/a +"""]] + +``` +git version 2.31.1.705.g1ce651569c +git-annex version: 8.20210429-gdab203070 +init (scanning for unlocked files...) +ok +(recording state in git...) ++ git annex fromkey --force SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c foo/a +fromkey foo/a ok +(recording state in git...) ++ git cat-file -p :foo/a +../.git/annex/objects/91/9x/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c/SHA256E-s4--b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c+ git config annex.addunlocked true ++ git annex fromkey --force SHA256E-s4--7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730 bar/a +fromkey bar/a +git-annex: bar/a: openBinaryFile: does not exist (No such file or directory) +failed +(recording state in git...) +git-annex: fromkey: 1 failed +``` + +The caller can of course make sure that leading directories exist, but +I think it makes sense for the locked and unlocked variants to behave +the same here. What do you think about the patch below? + +[[!format patch """ +From f6c97b8d01c7e9b8069638e9827062aa2462d429 Mon Sep 17 00:00:00 2001 +From: Kyle Meyer +Date: Thu, 6 May 2021 11:11:14 -0400 +Subject: [PATCH] fromkey: create directory for pointer files too + +fromkey creates leading directories for symbolic links. Do the same +for pointer files. +--- + Command/FromKey.hs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Command/FromKey.hs b/Command/FromKey.hs +index eadb89fd1..16ff1693f 100644 +--- a/Command/FromKey.hs ++++ b/Command/FromKey.hs +@@ -106,6 +106,7 @@ perform matcher key file = lookupKeyNotHidden file >>= \case + , matchKey = Just key + } + else keyMatchInfoWithoutContent key file ++ createWorkTreeDirectory (parentDir file) + ifM (addUnlocked matcher mi contentpresent) + ( do + stagePointerFile file Nothing =<< hashPointerFile key +@@ -115,7 +116,6 @@ perform matcher key file = lookupKeyNotHidden file >>= \case + else writepointer + , do + link <- calcRepo $ gitAnnexLink file key +- createWorkTreeDirectory (parentDir file) + addAnnexLink link file + ) + next $ return True + +base-commit: dab2030702200bc9abea4bff9ce83ba63aeca41c +-- +2.31.1.705.g1ce651569c + +"""]] + + +[[!meta author=kyle]] +[[!tag projects/datalad]]