X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=refs.c;h=7edcf6c91f38e3d07b42939e35dbcebb3662261e;hb=288a74bcd28229a00c3632f18cba92dbfdf73ee9;hp=ba22f4acefa262cc1029bcf8360edb21c0635953;hpb=c9c63ee558ce3399bd2016388da9676d4f5ecf55;p=thirdparty%2Fgit.git diff --git a/refs.c b/refs.c index ba22f4acef..7edcf6c91f 100644 --- a/refs.c +++ b/refs.c @@ -592,7 +592,7 @@ static int write_pseudoref(const char *pseudoref, const unsigned char *sha1, } } - if (write_in_full(fd, buf.buf, buf.len) != buf.len) { + if (write_in_full(fd, buf.buf, buf.len) < 0) { strbuf_addf(err, "could not write to '%s'", filename); rollback_lock_file(&lock); goto done; @@ -921,6 +921,8 @@ int ref_transaction_update(struct ref_transaction *transaction, return -1; } + flags &= REF_TRANSACTION_UPDATE_ALLOWED_FLAGS; + flags |= (new_sha1 ? REF_HAVE_NEW : 0) | (old_sha1 ? REF_HAVE_OLD : 0); ref_transaction_add_update(transaction, refname, flags, @@ -1160,7 +1162,7 @@ int ref_is_hidden(const char *refname, const char *refname_full) const char *match = hide_refs->items[i].string; const char *subject; int neg = 0; - int len; + const char *p; if (*match == '!') { neg = 1; @@ -1175,10 +1177,9 @@ int ref_is_hidden(const char *refname, const char *refname_full) } /* refname can be NULL when namespaces are used. */ - if (!subject || !starts_with(subject, match)) - continue; - len = strlen(match); - if (!subject[len] || subject[len] == '/') + if (subject && + skip_prefix(subject, match, &p) && + (!*p || *p == '/')) return !neg; } return 0;