Ronnie Sahlberg wrote:

> --- a/refs.c
> +++ b/refs.c
> @@ -3308,6 +3308,12 @@ struct ref_update {
>       const char refname[FLEX_ARRAY];
>  };
>  
> +enum ref_transaction_status {
> +     REF_TRANSACTION_OPEN   = 0,
> +     REF_TRANSACTION_CLOSED = 1,
> +     REF_TRANSACTION_ERROR  = 2,

What is the difference between _TRANSACTION_CLOSED and
_TRANSACTION_ERROR?

[...]
> @@ -3340,6 +3347,11 @@ void ref_transaction_free(struct ref_transaction 
> *transaction)
>  
>  void ref_transaction_rollback(struct ref_transaction *transaction)
>  {
> +     if (!transaction)
> +             return;
> +
> +     transaction->status = REF_TRANSACTION_ERROR;
> +
>       ref_transaction_free(transaction);

Once the transaction is freed, transaction->status is not reachable any
more so no one can tell that you've set it to _ERROR.  What is the
intended effect?

[...]
> @@ -3366,6 +3378,9 @@ int ref_transaction_update(struct ref_transaction 
> *transaction,
>       if (have_old && !old_sha1)
>               die("BUG: have_old is true but old_sha1 is NULL");
>  
> +     if (transaction->status != REF_TRANSACTION_OPEN)
> +             die("BUG: update on transaction that is not open");

Ok.

[...]
> @@ -3538,6 +3564,9 @@ int ref_transaction_commit(struct ref_transaction 
> *transaction,
>       clear_loose_ref_cache(&ref_cache);
>  
>  cleanup:
> +     transaction->status = ret ? REF_TRANSACTION_ERROR
> +       : REF_TRANSACTION_CLOSED;

Nit: odd use of whitespace.

Overall thoughts: I like the idea of enforcing the API more strictly
("after an error, the only permitted operations are...").  The details
leave me a little confused because I don't think anything is
distinguishing between _CLOSED and _ERROR.  Maybe the enum only needs
two states.

Thanks,
Jonathan
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to