Verify releases use original Git objects
This commit is contained in:
@@ -142,3 +142,52 @@ func TestInspectTaggedSourceReportsDirtyCheckoutAndReadCommitFile(t *testing.T)
|
||||
t.Fatalf("dirty status = %q", source.Status)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommittedReadsIgnoreReplacementObjects(t *testing.T) {
|
||||
for _, kind := range []string{"commit", "tree", "blob"} {
|
||||
t.Run(kind, func(t *testing.T) {
|
||||
fixture := newRemoteFixture(t)
|
||||
original := map[string]string{
|
||||
"commit": fixture.commit,
|
||||
"tree": gitText(t, fixture.work, "rev-parse", "HEAD^{tree}"),
|
||||
"blob": gitText(t, fixture.work, "rev-parse", "HEAD:source.txt"),
|
||||
}
|
||||
writeRepoFile(t, fixture.work, "source.txt", "replacement")
|
||||
gitRun(t, fixture.work, "add", "source.txt")
|
||||
gitRun(t, fixture.work, "commit", "-m", "Replacement")
|
||||
replacement := map[string]string{
|
||||
"commit": gitText(t, fixture.work, "rev-parse", "HEAD"),
|
||||
"tree": gitText(t, fixture.work, "rev-parse", "HEAD^{tree}"),
|
||||
"blob": gitText(t, fixture.work, "rev-parse", "HEAD:source.txt"),
|
||||
}
|
||||
gitRun(t, fixture.work, "reset", "--hard", fixture.commit)
|
||||
gitRun(t, fixture.work, "replace", original[kind], replacement[kind])
|
||||
|
||||
content, err := ReadCommitFile(t.Context(), fixture.work, fixture.commit, "source.txt")
|
||||
if err != nil || string(content) != "candidate" {
|
||||
t.Fatalf("committed content = %q, error = %v", content, err)
|
||||
}
|
||||
entries, err := ReadTree(t.Context(), fixture.work, fixture.commit)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var object string
|
||||
for _, entry := range entries {
|
||||
if entry.Path == "source.txt" {
|
||||
object = entry.ObjectID
|
||||
}
|
||||
}
|
||||
if object != original["blob"] {
|
||||
t.Fatalf("tree blob = %q, want %q", object, original["blob"])
|
||||
}
|
||||
reader := NewBlobReader(t.Context(), fixture.work)
|
||||
content, err = reader.Read(t.Context(), object)
|
||||
if err != nil || string(content) != "candidate" {
|
||||
t.Fatalf("batch content = %q, error = %v", content, err)
|
||||
}
|
||||
if err := reader.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user