diff --git a/cmd/bazel-git/archive.go b/cmd/bazel-git/archive.go index 47a3a6f8f71da90ad67eb0e9968ecf5bacb61945..438a8bf7c5810426ed422ba9aaef062d8e622de3 100644 --- a/cmd/bazel-git/archive.go +++ b/cmd/bazel-git/archive.go @@ -82,6 +82,9 @@ func writeTar(repo *git.Repository, commit *object.Commit, prefix string, archiv if err = writeCommitHash(commit, archive); err != nil { return err } + if err = writeRoot(commit, prefix, archive); err != nil { + return err + } for { name, entry, err := walker.Next() @@ -169,6 +172,23 @@ func writeMetadata(repo *git.Repository, commit *object.Commit, name string, ent return nil } +func writeRoot(commit *object.Commit, prefix string, archive *tar.Writer) error { + header := &tar.Header{ + Name: prefix, + Mode: 0775, + Size: 0, + Typeflag: tar.TypeDir, + ModTime: commit.Committer.When, + } + + err := archive.WriteHeader(header) + if err != nil { + return err + } + + return nil +} + func adjustName(entry object.TreeEntry, name string, prefix string) string { name = prefix + name if entry.Mode == filemode.Dir || entry.Mode == filemode.Submodule {