add_to_alternates_file: don't add duplicate entries
commit77b9b1d13ac9e6b78ba676d4edb221b7d2273c62
authorJeff King <peff@peff.net>
Mon, 10 Aug 2015 09:34:46 +0000 (10 05:34 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 10 Aug 2015 22:15:42 +0000 (10 15:15 -0700)
tree48dbdac8534c48be32d3e05dcb3846887d83fd6b
parentbc192300c49a32e1ef297dc3fa78a101f28e2a4c
add_to_alternates_file: don't add duplicate entries

The add_to_alternates_file function blindly uses
hold_lock_file_for_append to copy the existing contents, and
then adds the new line to it. This has two minor problems:

  1. We might add duplicate entries, which are ugly and
     inefficient.

  2. We do not check that the file ends with a newline, in
     which case we would bogusly append to the final line.
     This is quite unlikely in practice, though, as we call
     this function only from git-clone, so presumably we are
     the only writers of the file (and we always add a
     newline).

Instead of using hold_lock_file_for_append, let's copy the
file line by line, which ensures all records are properly
terminated. If we see an extra line, we can simply abort the
update (there is no point in even copying the rest, as we
know that it would be identical to the original).

As a bonus, we also get rid of some calls to the
static-buffer mkpath and git_path functions.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sha1_file.c
t/t5700-clone-reference.sh