#!/bin/sh global test_description := ''check bitmap operation with shallow repositories'' source ./test-lib.sh # We want to create a situation where the shallow, grafted # view of reachability does not match reality in a way that # might cause us to send insufficient objects. # # We do this with a history that repeats a state, like: # # A -- B -- C # file=1 file=2 file=1 # # and then create a shallow clone to the second commit, B. # In a non-shallow clone, that would mean we already have # the tree for A. But in a shallow one, we've grafted away # A, and fetching A to B requires that the other side send # us the tree for file=1. test_expect_success 'setup shallow repo' ' echo 1 >file && git add file && git commit -m orig && echo 2 >file && git commit -a -m update && git clone --no-local --bare --depth=1 . shallow.git && echo 1 >file && git commit -a -m repeat ' test_expect_success 'turn on bitmaps in the parent' ' git repack -adb ' test_expect_success 'shallow fetch from bitmapped repo' ' (cd shallow.git && git fetch) ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"check bitmap operation with shallow repositories">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <"setup shallow repo">)} { (SQ <"\n"> <"\techo 1 >file &&\n"> <"\tgit add file &&\n"> <"\tgit commit -m orig &&\n"> <"\techo 2 >file &&\n"> <"\tgit commit -a -m update &&\n"> <"\tgit clone --no-local --bare --depth=1 . shallow.git &&\n"> <"\techo 1 >file &&\n"> <"\tgit commit -a -m repeat\n"> ) } ) (C {(test_expect_success)} {(SQ <"turn on bitmaps in the parent">)} {(SQ <"\n"> <"\tgit repack -adb\n">)} ) (C {(test_expect_success)} {(SQ <"shallow fetch from bitmapped repo">)} {(SQ <"\n"> <"\t(cd shallow.git && git fetch)\n">)} ) (C {(test_done)}) ] )