patch: fromkey: create directory for pointer files too
This commit is contained in:
parent
dab2030702
commit
06e996efad
1 changed files with 93 additions and 0 deletions
|
@ -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 <kyle@kyleam.com>
|
||||
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]]
|
Loading…
Add table
Add a link
Reference in a new issue