#!/bin/sh

test_description='test handling of inter-pack delta cycles during repack

The goal here is to create a situation where we have two blobs, A and B, with A
as a delta against B in one pack, and vice versa in the other. Then if we can
persuade a full repack to find A from one pack and B from the other, that will
give us a cycle when we attempt to reuse those deltas.

The trick is in the "persuade" step, as it depends on the internals of how
pack-objects picks which pack to reuse the deltas from. But we can assume
that it does so in one of two general strategies:

 1. Using a static ordering of packs. In this case, no inter-pack cycles can
    happen. Any objects with a delta relationship must be present in the same
    pack (i.e., no "--thin" packs on disk), so we will find all related objects
    from that pack. So assuming there are no cycles within a single pack (and
    we avoid generating them via pack-objects or importing them via
    index-pack), then our result will have no cycles.

    So this case should pass the tests no matter how we arrange things.

 2. Picking the next pack to examine based on locality (i.e., where we found
    something else recently).

    In this case, we want to make sure that we find the delta versions of A and
    B and not their base versions. We can do this by putting two blobs in each
    pack. The first is a "dummy" blob that can only be found in the pack in
    question.  And then the second is the actual delta we want to find.

    The two blobs must be present in the same tree, not present in other trees,
    and the dummy pathname must sort before the delta path.

The setup below focuses on case 2. We have two commits HEAD and HEAD^, each
which has two files: "dummy" and "file". Then we can make two packs which
contain:

  [pack one]
  HEAD:dummy
  HEAD:file  (as delta against HEAD^:file)
  HEAD^:file (as base)

  [pack two]
  HEAD^:dummy
  HEAD^:file (as delta against HEAD:file)
  HEAD:file  (as base)

Then no matter which order we start looking at the packs in, we know that we
will always find a delta for "file", because its lookup will always come
immediately after the lookup for "dummy".
'

. ./test-lib.sh

# Create a pack containing the tree $1 and blob $1:file, with
# the latter stored as a delta against $2:file.
#
# We convince pack-objects to make the delta in the direction of our choosing
# by marking $2 as a preferred-base edge. That results in $1:file as a thin
# delta, and index-pack completes it by adding $2:file as a base.
#
# Note that the two variants of "file" must be similar enough to convince git
# to create the delta.
make_pack () {
	ln1=$(git rev-parse "$2") &&
	ln2=$(git rev-parse "$1:dummy") &&
	ln3=$(git rev-parse "$1:file") &&
	cat >list <<-EOF
	-$ln1
	$ln2 dummy
	$ln3 file
	EOF
	git pack-objects --stdout <list >pack &&
	git index-pack --stdin --fix-thin <pack
}

test_expect_success 'setup' '
	test-tool genrandom base 4096 >base &&
	for i in one two
	do
		# we want shared content here to encourage deltas...
		cp base file &&
		echo $i >>file &&

		# ...whereas dummy should be short, because we do not want
		# deltas that would create duplicates when we --fix-thin
		echo $i >dummy &&

		git add file dummy &&
		test_tick &&
		git commit -m $i ||
		return 1
	done &&

	make_pack HEAD^ HEAD &&
	make_pack HEAD HEAD^
'

test_expect_success 'repack' '
	# We first want to check that we do not have any internal errors,
	# and also that we do not hit the last-ditch cycle-breaking code
	# in write_object(), which will issue a warning to stderr.
	git repack -ad 2>stderr &&
	test_must_be_empty stderr &&

	# And then double-check that the resulting pack is usable (i.e.,
	# we did not fail to notice any cycles). We know we are accessing
	# the objects via the new pack here, because "repack -d" will have
	# removed the others.
	git cat-file blob HEAD:file >/dev/null &&
	git cat-file blob HEAD^:file >/dev/null
'

test_done
