mirror of
https://github.com/octoleo/restic.git
synced 2024-12-01 17:23:57 +00:00
Snapshot: Add Original ID
The Original ID is used when the snapshot is modified (e.g. by `tag` command). Adjust integration testing to assert correctness.
This commit is contained in:
parent
26e266a951
commit
1fa2313aef
@ -76,6 +76,11 @@ func changeTags(repo *repository.Repository, snapshotID restic.ID, setTags, addT
|
|||||||
}
|
}
|
||||||
|
|
||||||
if changed {
|
if changed {
|
||||||
|
// Retain the original snapshot id over all tag changes.
|
||||||
|
if sn.Original == nil {
|
||||||
|
sn.Original = sn.ID()
|
||||||
|
}
|
||||||
|
|
||||||
// Save the new snapshot.
|
// Save the new snapshot.
|
||||||
id, err := repo.SaveJSONUnpacked(restic.SnapshotFile, sn)
|
id, err := repo.SaveJSONUnpacked(restic.SnapshotFile, sn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -670,6 +670,9 @@ func TestTag(t *testing.T) {
|
|||||||
Assert(t, newest != nil, "expected a new backup, got nil")
|
Assert(t, newest != nil, "expected a new backup, got nil")
|
||||||
Assert(t, len(newest.Tags) == 0,
|
Assert(t, len(newest.Tags) == 0,
|
||||||
"expected no tags, got %v", newest.Tags)
|
"expected no tags, got %v", newest.Tags)
|
||||||
|
Assert(t, newest.Original == nil,
|
||||||
|
"expected original ID to be nil, got %v", newest.Original)
|
||||||
|
originalID := *newest.ID
|
||||||
|
|
||||||
testRunTag(t, TagOptions{SetTags: []string{"NL"}}, gopts)
|
testRunTag(t, TagOptions{SetTags: []string{"NL"}}, gopts)
|
||||||
testRunCheck(t, gopts)
|
testRunCheck(t, gopts)
|
||||||
@ -677,6 +680,9 @@ func TestTag(t *testing.T) {
|
|||||||
Assert(t, newest != nil, "expected a new backup, got nil")
|
Assert(t, newest != nil, "expected a new backup, got nil")
|
||||||
Assert(t, len(newest.Tags) == 1 && newest.Tags[0] == "NL",
|
Assert(t, len(newest.Tags) == 1 && newest.Tags[0] == "NL",
|
||||||
"set failed, expected one NL tag, got %v", newest.Tags)
|
"set failed, expected one NL tag, got %v", newest.Tags)
|
||||||
|
Assert(t, newest.Original != nil, "expected original snapshot id, got nil")
|
||||||
|
Assert(t, *newest.Original == originalID,
|
||||||
|
"expected original ID to be set to the first snapshot id")
|
||||||
|
|
||||||
testRunTag(t, TagOptions{AddTags: []string{"CH"}}, gopts)
|
testRunTag(t, TagOptions{AddTags: []string{"CH"}}, gopts)
|
||||||
testRunCheck(t, gopts)
|
testRunCheck(t, gopts)
|
||||||
@ -684,6 +690,9 @@ func TestTag(t *testing.T) {
|
|||||||
Assert(t, newest != nil, "expected a new backup, got nil")
|
Assert(t, newest != nil, "expected a new backup, got nil")
|
||||||
Assert(t, len(newest.Tags) == 2 && newest.Tags[0] == "NL" && newest.Tags[1] == "CH",
|
Assert(t, len(newest.Tags) == 2 && newest.Tags[0] == "NL" && newest.Tags[1] == "CH",
|
||||||
"add failed, expected CH,NL tags, got %v", newest.Tags)
|
"add failed, expected CH,NL tags, got %v", newest.Tags)
|
||||||
|
Assert(t, newest.Original != nil, "expected original snapshot id, got nil")
|
||||||
|
Assert(t, *newest.Original == originalID,
|
||||||
|
"expected original ID to be set to the first snapshot id")
|
||||||
|
|
||||||
testRunTag(t, TagOptions{RemoveTags: []string{"NL"}}, gopts)
|
testRunTag(t, TagOptions{RemoveTags: []string{"NL"}}, gopts)
|
||||||
testRunCheck(t, gopts)
|
testRunCheck(t, gopts)
|
||||||
@ -691,6 +700,9 @@ func TestTag(t *testing.T) {
|
|||||||
Assert(t, newest != nil, "expected a new backup, got nil")
|
Assert(t, newest != nil, "expected a new backup, got nil")
|
||||||
Assert(t, len(newest.Tags) == 1 && newest.Tags[0] == "CH",
|
Assert(t, len(newest.Tags) == 1 && newest.Tags[0] == "CH",
|
||||||
"remove failed, expected one CH tag, got %v", newest.Tags)
|
"remove failed, expected one CH tag, got %v", newest.Tags)
|
||||||
|
Assert(t, newest.Original != nil, "expected original snapshot id, got nil")
|
||||||
|
Assert(t, *newest.Original == originalID,
|
||||||
|
"expected original ID to be set to the first snapshot id")
|
||||||
|
|
||||||
testRunTag(t, TagOptions{AddTags: []string{"US", "RU"}}, gopts)
|
testRunTag(t, TagOptions{AddTags: []string{"US", "RU"}}, gopts)
|
||||||
testRunTag(t, TagOptions{RemoveTags: []string{"CH", "US", "RU"}}, gopts)
|
testRunTag(t, TagOptions{RemoveTags: []string{"CH", "US", "RU"}}, gopts)
|
||||||
@ -699,6 +711,9 @@ func TestTag(t *testing.T) {
|
|||||||
Assert(t, newest != nil, "expected a new backup, got nil")
|
Assert(t, newest != nil, "expected a new backup, got nil")
|
||||||
Assert(t, len(newest.Tags) == 0,
|
Assert(t, len(newest.Tags) == 0,
|
||||||
"expected no tags, got %v", newest.Tags)
|
"expected no tags, got %v", newest.Tags)
|
||||||
|
Assert(t, newest.Original != nil, "expected original snapshot id, got nil")
|
||||||
|
Assert(t, *newest.Original == originalID,
|
||||||
|
"expected original ID to be set to the first snapshot id")
|
||||||
|
|
||||||
// Check special case of removing all tags.
|
// Check special case of removing all tags.
|
||||||
testRunTag(t, TagOptions{SetTags: []string{""}}, gopts)
|
testRunTag(t, TagOptions{SetTags: []string{""}}, gopts)
|
||||||
@ -707,6 +722,9 @@ func TestTag(t *testing.T) {
|
|||||||
Assert(t, newest != nil, "expected a new backup, got nil")
|
Assert(t, newest != nil, "expected a new backup, got nil")
|
||||||
Assert(t, len(newest.Tags) == 0,
|
Assert(t, len(newest.Tags) == 0,
|
||||||
"expected no tags, got %v", newest.Tags)
|
"expected no tags, got %v", newest.Tags)
|
||||||
|
Assert(t, newest.Original != nil, "expected original snapshot id, got nil")
|
||||||
|
Assert(t, *newest.Original == originalID,
|
||||||
|
"expected original ID to be set to the first snapshot id")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ type Snapshot struct {
|
|||||||
GID uint32 `json:"gid,omitempty"`
|
GID uint32 `json:"gid,omitempty"`
|
||||||
Excludes []string `json:"excludes,omitempty"`
|
Excludes []string `json:"excludes,omitempty"`
|
||||||
Tags []string `json:"tags,omitempty"`
|
Tags []string `json:"tags,omitempty"`
|
||||||
|
Original *ID `json:"original,omitempty"`
|
||||||
|
|
||||||
id *ID // plaintext ID, used during restore
|
id *ID // plaintext ID, used during restore
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user