On Wed, Feb 13, 2019 at 11:08:01AM +0100, Ævar Arnfjörð Bjarmason wrote: > > On Thu, Jan 31 2019, Max Kirillov wrote: > > refs/packed-backend.c | 15 +++++++++++++++ > > t/t3212-pack-refs-broken-sorting.sh | 26 ++++++++++++++++++++++++++ > > 2 files changed, 41 insertions(+) > > create mode 100755 t/t3212-pack-refs-broken-sorting.sh > > This is not an area I'm very familiar with. So mostly commeting on > cosmetic issues with the patch. Just two quick comments in addition to Ævar's: > > @@ -1137,6 +1138,20 @@ static int write_with_updates(struct packed_ref_store *refs, > > struct ref_update *update = NULL; > > int cmp; > > > > + if (iter) > > + { According to our CodingGuidelines, the opening bracket should go on the same line as the condition, i.e. if (iter) { > > diff --git a/t/t3212-pack-refs-broken-sorting.sh b/t/t3212-pack-refs-broken-sorting.sh > > new file mode 100755 > > index 0000000000..37a98a6fb1 > > --- /dev/null > > +++ b/t/t3212-pack-refs-broken-sorting.sh > > @@ -0,0 +1,26 @@ > > +#!/bin/sh > > + > > +test_description='tests for the falsely sorted refs' > > +. ./test-lib.sh > > + > > +test_expect_success 'setup' ' > > + git commit --allow-empty -m commit && > > Looks like just "test_commit A" would do here. > > > + for num in $(test_seq 10) > > + do > > + git branch b$(printf "%02d" $num) || break > > + done && > > We can fail in these sorts of loops. There's a few ways to deal with > that. Doing it like this with "break" will still silently hide errors: > > $ for i in $(seq 1 3); do if test $i = 2; then false || break; else echo $i; fi; done && echo success > 1 > success > > One way to deal with that is to e.g. before the loop say "had_fail=", > then set "had_fail=t" in that "||" case, and test for it after the loop. No, you can simply do 'cmd1 && cmd2 || return 1' in the body of the for loop; that's why we have a separate test_eval_inner() helper function in test-lib.