summaryrefslogtreecommitdiff
path: root/Git
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-10-30 12:02:18 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-10-30 12:02:22 -0400
commit2b936be6f9a4b0340c5f32267429f2505230daaa (patch)
tree896f1ac4bc4900ae3737caf4367c20c6761d785c /Git
parent8f26492d1e61cca2a557b192821e566611cc15be (diff)
Fix export of subdir of a branch.
Seems I forgot to fully test that feature when documenting it. git rev-parse needs a colon after a branch to de-reference the tree it points to, rather than the commit. But that had it adding an extra colon when the user specified "branch:subdir". So, check if there is a colon before adding one. This commit was sponsored by Francois Marier on Patreon.
Diffstat (limited to 'Git')
-rw-r--r--Git/Ref.hs9
1 files changed, 7 insertions, 2 deletions
diff --git a/Git/Ref.hs b/Git/Ref.hs
index 06fc5dcd7..9a2e47c37 100644
--- a/Git/Ref.hs
+++ b/Git/Ref.hs
@@ -136,8 +136,13 @@ delete oldvalue ref = run
{- Gets the sha of the tree a ref uses. -}
tree :: Ref -> Repo -> IO (Maybe Sha)
-tree ref = extractSha <$$> pipeReadStrict
- [ Param "rev-parse", Param (fromRef ref ++ ":") ]
+tree (Ref ref) = extractSha <$$> pipeReadStrict
+ [ Param "rev-parse", Param ref' ]
+ where
+ ref' = if ':' `isInfixOf` ref
+ then ref
+ -- de-reference commit objects to the tree
+ else ref ++ ":"
{- Checks if a String is a legal git ref name.
-