git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 01/13] delete_ref(): move declaration to refs.h

From
Stefan Beller <sbeller@google.com>
Date
Jun 8, 2015, 16:43 UTC
Message-ID
<CAGZ79kYy3zUezRzAG3Uo7bDbLgJ7srj3F1k-ama1C44ZdbHr=Q@mail.gmail.com>
In-Reply-To
<2eea274d60e355e4944ca9ed400e6c2132b4ed32.1433763494.git.mhagger@alum.mit.edu>
On Mon, Jun 8, 2015 at 4:45 AM, Michael Haggerty <mhagger@alum.mit.edu> wrote:
Show 62 quoted lines
> Also
>
> * Add a docstring
>
> * Rename the second parameter to "old_sha1", to be consistent with the
>   convention used elsewhere in the refs module
>
> Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
> ---
>  cache.h | 2 --
>  refs.c  | 5 +++--
>  refs.h  | 9 +++++++++
>  3 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/cache.h b/cache.h
> index 571c98f..be92121 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -585,8 +585,6 @@ extern void update_index_if_able(struct index_state *, struct lock_file *);
>  extern int hold_locked_index(struct lock_file *, int);
>  extern void set_alternate_index_output(const char *);
>
> -extern int delete_ref(const char *, const unsigned char *sha1, unsigned int flags);
> -
>  /* Environment bits from configuration mechanism */
>  extern int trust_executable_bit;
>  extern int trust_ctime;
> diff --git a/refs.c b/refs.c
> index a742d79..b575bb8 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -2789,7 +2789,8 @@ static int delete_ref_loose(struct ref_lock *lock, int flag, struct strbuf *err)
>         return 0;
>  }
>
> -int delete_ref(const char *refname, const unsigned char *sha1, unsigned int flags)
> +int delete_ref(const char *refname, const unsigned char *old_sha1,
> +              unsigned int flags)
>  {
>         struct ref_transaction *transaction;
>         struct strbuf err = STRBUF_INIT;
> @@ -2797,7 +2798,7 @@ int delete_ref(const char *refname, const unsigned char *sha1, unsigned int flag
>         transaction = ref_transaction_begin(&err);
>         if (!transaction ||
>             ref_transaction_delete(transaction, refname,
> -                                  (sha1 && !is_null_sha1(sha1)) ? sha1 : NULL,
> +                                  (old_sha1 && !is_null_sha1(old_sha1)) ? old_sha1 : NULL,
>                                    flags, NULL, &err) ||
>             ref_transaction_commit(transaction, &err)) {
>                 error("%s", err.buf);
> diff --git a/refs.h b/refs.h
> index 8c3d433..8785bca 100644
> --- a/refs.h
> +++ b/refs.h
> @@ -202,6 +202,15 @@ extern int read_ref_at(const char *refname, unsigned int flags,
>  /** Check if a particular reflog exists */
>  extern int reflog_exists(const char *refname);
>
> +/*
> + * Delete the specified reference. If old_sha1 is non-NULL and not
> + * NULL_SHA1, then verify that the current value of the reference is
> + * old_sha1 before deleting it.
And here I wondered what the distinction between NULL and non-NULL,
but NULL_SHA1
is and digging into the code, there is none. (As you can also see in
this patch above with
    (old_sha1 && !is_null_sha1(old_sha1)) ? old_sha1 : NULL,
but when digging deeper, the !is_null_sha1(old_sha1) is an arbitrary
limitation (i.e.
ref_transaction_delete and ref_transaction_update don't differ between
those two cases.)

The distinction comes in at lock_ref_sha1_basic, where I think we may want to get rid of the is_null_sha1 check and depend on NULL/non-NULL as the difference for valid and invalid sha1's?

That said, do we want to add another sentence to the doc here saying
non-NULL and not
NULL_SHA1 are treated the same or is it clear enough?
With or without this question addressed:
Reviewed-by: Stefan Beller <sbeller@google.com>
Show 12 quoted lines
> flags is passed to
> + * ref_transaction_delete().
> + */
> +extern int delete_ref(const char *refname, const unsigned char *old_sha1,
> +                     unsigned int flags);
> +
>  /** Delete a reflog */
>  extern int delete_reflog(const char *refname);
>
> --
> 2.1.4
>
Previous: Michael HaggertyNext: Michael Haggerty
Message 3 of 30 in “Improve "refs" module encapsulation”
  1. 00/13 Improve "refs" module encapsulationMichael Haggerty, Jun 8, 2015
  2. 01/13 delete_ref(): move declaration to refs.hMichael Haggerty, Jun 8, 2015
  3. Stefan BellerJun 8, 2015
  4. Michael HaggertyJun 9, 2015
  5. Stefan BellerJun 9, 2015
  6. Michael HaggertyJun 13, 2015
  7. 02/13 remove_branches(): remove temporaryMichael Haggerty, Jun 8, 2015
  8. Stefan BellerJun 8, 2015
  9. 03/13 delete_ref(): handle special case more explicitlyMichael Haggerty, Jun 8, 2015
  10. Stefan BellerJun 8, 2015
  11. Michael HaggertyJun 9, 2015
  12. 04/13 delete_refs(): new function for the refs APIMichael Haggerty, Jun 8, 2015
  13. 05/13 delete_refs(): improve error messageMichael Haggerty, Jun 8, 2015
  14. Junio C HamanoJun 9, 2015
  15. 06/13 delete_refs(): convert error message to lower caseMichael Haggerty, Jun 8, 2015
  16. Stefan BellerJun 8, 2015
  17. Michael HaggertyJun 9, 2015
  18. 07/13 prune_remote(): use delete_refs()Michael Haggerty, Jun 8, 2015
  19. Stefan BellerJun 8, 2015
  20. Jeff KingJun 8, 2015
  21. Michael HaggertyJun 9, 2015
  22. Jeff KingJun 9, 2015
  23. 08/13 repack_without_refs(): make function privateMichael Haggerty, Jun 8, 2015
  24. 09/13 initial_ref_transaction_commit(): function for initial ref creationMichael Haggerty, Jun 8, 2015
  25. 10/13 refs: remove some functions from the module's public interfaceMichael Haggerty, Jun 8, 2015
  26. 11/13 initial_ref_transaction_commit(): check for duplicate refsMichael Haggerty, Jun 8, 2015
  27. 12/13 initial_ref_transaction_commit(): check for ref D/F conflictsMichael Haggerty, Jun 8, 2015
  28. 13/13 refs: move the remaining ref module declarations to refs.hMichael Haggerty, Jun 8, 2015
  29. Stefan BellerJun 8, 2015
  30. Junio C HamanoJun 9, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.