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]]

> Thanks for the patch, applied
> [[done]] --[[Joey]]
