|
|
|
@ -113,6 +113,10 @@ rec { |
|
|
|
|
with builtins; |
|
|
|
|
let fileName = toString path + "/" + file; |
|
|
|
|
packedRefsName = toString path + "/packed-refs"; |
|
|
|
|
absolutePath = base: path: |
|
|
|
|
if lib.hasPrefix "/" path |
|
|
|
|
then path |
|
|
|
|
else toString (/. + "${base}/${path}"); |
|
|
|
|
in if pathIsRegularFile path |
|
|
|
|
# Resolve git worktrees. See gitrepository-layout(5) |
|
|
|
|
then |
|
|
|
@ -120,13 +124,11 @@ rec { |
|
|
|
|
in if m == null |
|
|
|
|
then throw ("File contains no gitdir reference: " + path) |
|
|
|
|
else |
|
|
|
|
let gitDir = lib.head m; |
|
|
|
|
let gitDir = absolutePath (dirOf path) (lib.head m); |
|
|
|
|
commonDir' = if pathIsRegularFile "${gitDir}/commondir" |
|
|
|
|
then lib.fileContents "${gitDir}/commondir" |
|
|
|
|
else gitDir; |
|
|
|
|
commonDir = if lib.hasPrefix "/" commonDir' |
|
|
|
|
then commonDir' |
|
|
|
|
else toString (/. + "${gitDir}/${commonDir'}"); |
|
|
|
|
commonDir = absolutePath gitDir commonDir'; |
|
|
|
|
refFile = lib.removePrefix "${commonDir}/" "${gitDir}/${file}"; |
|
|
|
|
in readCommitFromFile refFile commonDir |
|
|
|
|
|
|
|
|
|