This patch series changes most of the places where the ref functions for
locking and writing refs to instead use the new ref transaction API. There
are still three more places where write_ref_sha1() is called from outside
of refs.c but those all will require more complex work and review so those
changes belong in a different patch series.
I think I have covered all issues raised on the previous reviews and also
done a bunch of cleanups and improvements to the transaction API.
Version 3:
- Remove the walker patch for now. Walker needs more complex solution
so defer it until the basics are done.
- Remove the onerr argument to ref_transaction_commit(). All callers
that need to die() on error now have to do this explicitely.
- Pass an error string from ref_transaction_commit() back to the callers
so that they can craft a nice error message upon failures.
- Make ref_transaction_rollback() accept NULL as argument.
- Change ref_transaction_commit() to take a pointer to pointer argument for
the transaction and have it clear the callers pointer to NULL when
invoked. This allows for much nicer handling of transaction rollback on
failure.
Version 2:
- Add a patch to ref_transaction_commit to make it honor onerr even if the
error triggered in ref_Transaction_commit itself rather than in a call
to other functions (that already honor onerr).
- Add a patch to make the update_ref() helper function use transactions
internally.
- Change ref_transaction_update to die() instead of error() if we pass
if a NULL old_sha1 but have have_old == true.
- Change ref_transaction_create to die() instead of error() if new_sha1
is false but we pass it a null_sha1.
- Change ref_transaction_delete die() instead of error() if we pass
if a NULL old_sha1 but have have_old == true.
- Change several places to do if(!transaction || ref_transaction_update()
|| ref_Transaction_commit()) die(generic-message) instead of checking each
step separately and having a different message for each failure.
Most users are likely not interested in what step of the transaction
failed and only whether it failed or not.
- Change commit.c to only pass a pointer to ref_transaction_update
iff current_head is non-NULL.
The previous patch used to compute a garbage pointer for
current_head->object.sha1 and relied on the fact that ref_transaction_update
would not try to dereference this pointer if !!current_head was 0.
- Updated commit message for the walker_fetch change to try to justify why
the change in locking semantics should not be harmful.
Ronnie Sahlberg (19):
refs.c: constify the sha arguments for
ref_transaction_create|delete|update
refs.c: allow passing NULL to ref_transaction_free
refs.c: make ref_transaction_commit return an error string
refs.c: return error string from ref_update_reject_duplicates on
failure
update-ref.c: use the error string from _commit to print better
message
refs.c: make update_ref_write to return error string on failure
refs.c: remove the onerr argument to ref_transaction_commit
refs.c: change ref_transaction_update() to do error checking and
return status
refs.c: change ref_transaction_create to do error checking and return
status
refs.c: ref_transaction_delete to check for error and return status
tag.c: use ref transactions when doing updates
replace.c: use the ref transaction functions for updates
commit.c: use ref transactions for updates
sequencer.c: use ref transactions for all ref updates
fast-import.c: change update_branch to use ref transactions
branch.c: use ref transaction for all ref updates
refs.c: change update_ref to use a transaction
refs.c: free the transaction before returning when number of updates
is 0
refs.c: pass **transaction to commit and have it clear the pointer
branch.c | 39 ++++++++++------
builtin/commit.c | 23 +++++-----
builtin/replace.c | 14 +++---
builtin/tag.c | 14 +++---
builtin/update-ref.c | 30 ++++++++-----
fast-import.c | 18 ++++----
refs.c | 122 +++++++++++++++++++++++++++++++++++---------------
refs.h | 32 +++++++------
sequencer.c | 21 ++++++---
t/t1400-update-ref.sh | 16 +++----
10 files changed, 206 insertions(+), 123 deletions(-)
--
1.9.1.521.g5dc89fa
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html