Skip to content

Commit

Permalink
struct ref_update: add a type field
Browse files Browse the repository at this point in the history
It used to be that ref_transaction_commit() allocated a temporary
array to hold the types of references while it is working.  Instead,
add a type field to ref_update that ref_transaction_commit() can use
as its scratch space.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed Apr 7, 2014
1 parent 81c960e commit 84178db
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -3279,6 +3279,7 @@ struct ref_update {
int flags; /* REF_NODEREF? */
int have_old; /* 1 if old_sha1 is valid, 0 otherwise */
struct ref_lock *lock;
int type;
const char refname[FLEX_ARRAY];
};

Expand Down Expand Up @@ -3413,7 +3414,6 @@ int ref_transaction_commit(struct ref_transaction *transaction,
{
int ret = 0, delnum = 0, i;
struct ref_update **updates;
int *types;
const char **delnames;
int n = transaction->nr;

Expand All @@ -3422,7 +3422,6 @@ int ref_transaction_commit(struct ref_transaction *transaction,

/* Allocate work space */
updates = xmalloc(sizeof(*updates) * n);
types = xmalloc(sizeof(*types) * n);
delnames = xmalloc(sizeof(*delnames) * n);

/* Copy, sort, and reject duplicate refs */
Expand All @@ -3440,7 +3439,7 @@ int ref_transaction_commit(struct ref_transaction *transaction,
(update->have_old ?
update->old_sha1 : NULL),
update->flags,
&types[i], onerr);
&update->type, onerr);
if (!update->lock) {
ret = 1;
goto cleanup;
Expand Down Expand Up @@ -3468,7 +3467,7 @@ int ref_transaction_commit(struct ref_transaction *transaction,

if (update->lock) {
delnames[delnum++] = update->lock->ref_name;
ret |= delete_ref_loose(update->lock, types[i]);
ret |= delete_ref_loose(update->lock, update->type);
}
}

Expand All @@ -3482,7 +3481,6 @@ int ref_transaction_commit(struct ref_transaction *transaction,
if (updates[i]->lock)
unlock_ref(updates[i]->lock);
free(updates);
free(types);
free(delnames);
ref_transaction_free(transaction);
return ret;
Expand Down

0 comments on commit 84178db

Please sign in to comment.