Skip to content
go-libfossil Artifact [764d20c272]
Login

Artifact [764d20c272]

Artifact 764d20c2720925eb30eac7cc1f36e8dc330aecea957e634d44eb369c33cd5758:


package conformance

import "testing"

// repostateGaps marks the repository-state cases go-libfossil is known to
// fail, by case ID, grouped by the code at fault, each with the issue
// tracking its fix.
var repostateGaps = map[string]string{
	// Name resolution (repo_history.go ResolveVersion): no checkout context
	// and no requested type. These cases do not yet call the API #386 will
	// add (the branch-type case calls nothing it could pass): rewire them to
	// the new entry points when it lands, do not just delete these entries.
	"repostate.8.3.current":     "#386",
	"repostate.8.3.prev":        "#386",
	"repostate.8.3.previous":    "#386",
	"repostate.8.3.next":        "#386",
	"repostate.8.3.branch-type": "#386",
}

// repostateDeviations marks the cases where go-libfossil follows fossil(1)
// rather than the draft text, by case ID.
var repostateDeviations = map[string]string{
	"repostate.7.3.parentless-untagged": parentlessDeviation,
	// verify.Rebuild now derives leaves through the crosslink sweep, so it shares
	// the same branch-aware leaf rule and the same ยง7.3 deviation.
	"repostate.7.3.parentless-untagged.rebuild": parentlessDeviation,
	// The same check-in seen from Section 7.3's crosslink trigger: linking it
	// does not recheck it, as fossil's does not.
	"repostate.7.3.recheck-lone-untagged": parentlessDeviation,
	// An untagged child of a tagged check-in: Section 7.3 rechecks it and
	// its parent when it is linked.
	"repostate.7.3.recheck-untagged-child":         untaggedChildDeviation,
	"repostate.7.3.recheck-untagged-child.rebuild": untaggedChildDeviation,
}

const untaggedChildDeviation = "follows fossil(1): a check-in with a parent but no branch " +
	"tag is never rechecked, so it is no leaf and its parent keeps its verdict, where " +
	"Section 7.3 rechecks every crosslinked check-in and its parents; widening the " +
	"candidates changed the leaf table of a real fossil-authored repository (the " +
	"libfossil corpus)"

const parentlessDeviation = "follows fossil(1): an untagged parentless check-in is " +
	"never a leaf, where Section 7.3 makes every check-in without a same-branch " +
	"child one (the section's informative note records fossil's behavior)"

// TestRepoStateGapKeys checks that every marked case exists.
func TestRepoStateGapKeys(t *testing.T) {
	ids := map[string]bool{}
	for _, c := range repostateSuiteCases() {
		ids[c.ID] = true
	}
	for id := range repostateGaps {
		if !ids[id] {
			t.Errorf("repostateGaps names %s, which is not a case", id)
		}
	}
	for id := range repostateDeviations {
		if !ids[id] {
			t.Errorf("repostateDeviations names %s, which is not a case", id)
		}
	}
}