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

[PATCH 00/23] Add reflog_expire() to the references API

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Dec 4, 2014, 23:08 UTC
Message-ID
<1417734515-11812-1-git-send-email-mhagger@alum.mit.edu>

I propose this patch series as an alternative to Ronnie's "reflog transactions" series.

Both alternatives have been discussed exhaustively on the list [1,2]. My opinion is that there is no need to allow arbitrary reflog changes via the ref_transaction API, because just about the only things we want to do are

* Append an entry to a reflog when a reference is updated. This should
  (and is already) done as a side effect of the reference update.
* Expire or delete old reflog entries based on relatively complicated
  logic, possibly repairing the remaining entries so as to preserve
  the continuity of the reflog chain.

This patch series shows that the latter can be done with a single, fairly simple, purpose-made function, expire_reflog(), in the references API. The policy for what reflog entries should be expired is specified by the caller via three callback functions that don't have to know anything about how reflogs are stored. The locking, iteration, repair, and writing is implemented within the references module, in a function that can easily be swapped out when pluggable reference backends are implemented.

The remaining reflog operations (enabling/disabling reflogs for a reference, renaming the reflog when a reference is renamed) are not especially difficult but will be brought into the same framework in a future patch series.

The first few patches and the last few are taken from Ronnie's and Stefan's work. I chose *not* to rename the ref_transaction functions for obvious reasons. A couple of the later patches from their series would make sense but are not duplicated here.

This branch is also available on GitHub:
    https://github.com/mhagger/git.git, branch reflog-expire-api-v1
Michael

[1] http://thread.gmane.org/gmane.comp.version-control.git/259712/focus=259770 [2] http://thread.gmane.org/gmane.comp.version-control.git/260731/focus=260767

Michael Haggerty (17):
  expire_reflog(): remove unused parameter
  expire_reflog(): rename "ref" parameter to "refname"
  expire_reflog(): exit early if the reference has no reflog
  expire_reflog(): use a lock_file for rewriting the reflog file
  Extract function should_expire_reflog_ent()
  expire_reflog(): extract two policy-related functions
  expire_reflog(): add a "flags" argument
  expire_reflog(): move dry_run to flags argument
  expire_reflog(): move updateref to flags argument
  Rename expire_reflog_cb to expire_reflog_policy_cb
  struct expire_reflog_cb: a new callback data type
  expire_reflog(): pass flags through to expire_reflog_ent()
  expire_reflog(): move verbose to flags argument
  expire_reflog(): move rewrite to flags argument
  Move newlog and last_kept_sha1 to "struct expire_reflog_cb"
  expire_reflog(): treat the policy callback data as opaque
  reflog_expire(): new function in the reference API
Ronnie Sahlberg (5):
  refs.c: make ref_transaction_create a wrapper for
    ref_transaction_update
  refs.c: make ref_transaction_delete a wrapper for
    ref_transaction_update
  refs.c: add a function to append a reflog entry to a fd
  refs.c: remove unlock_ref/close_ref/commit_ref from the refs api
  lock_any_ref_for_update(): inline function
Stefan Beller (1):
  refs.c: don't expose the internal struct ref_lock in the header file
 builtin/reflog.c | 259 ++++++++++++++++++++++---------------------------------
 refs.c           | 251 +++++++++++++++++++++++++++++++++++------------------
 refs.h           |  74 ++++++++++------
 3 files changed, 319 insertions(+), 265 deletions(-)
-- 
2.1.3
Next: Michael Haggerty
Message 1 of 63 in “Add reflog_expire() to the references API”
  1. 00/23 Add reflog_expire() to the references APIMichael Haggerty, Dec 4, 2014
  2. 01/23 refs.c: make ref_transaction_create a wrapper for ref_transaction_updateMichael Haggerty, Dec 4, 2014
  3. 02/23 refs.c: make ref_transaction_delete a wrapper for ref_transaction_updateMichael Haggerty, Dec 4, 2014
  4. 03/23 refs.c: add a function to append a reflog entry to a fdMichael Haggerty, Dec 4, 2014
  5. 04/23 expire_reflog(): remove unused parameterMichael Haggerty, Dec 4, 2014
  6. Jonathan NiederDec 4, 2014
  7. Jonathan NiederDec 4, 2014
  8. Michael HaggertyDec 5, 2014
  9. 05/23 expire_reflog(): rename "ref" parameter to "refname"Michael Haggerty, Dec 4, 2014
  10. Jonathan NiederDec 4, 2014
  11. 06/23 expire_reflog(): exit early if the reference has no reflogMichael Haggerty, Dec 4, 2014
  12. Jonathan NiederDec 4, 2014
  13. Jonathan NiederDec 4, 2014
  14. Michael HaggertyDec 5, 2014
  15. 07/23 expire_reflog(): use a lock_file for rewriting the reflog fileMichael Haggerty, Dec 4, 2014
  16. Jonathan NiederDec 5, 2014
  17. Stefan BellerDec 5, 2014
  18. Michael HaggertyDec 8, 2014
  19. Junio C HamanoDec 9, 2014
  20. Jeff KingDec 9, 2014
  21. Stefan BellerDec 5, 2014
  22. Junio C HamanoDec 5, 2014
  23. Stefan BellerDec 5, 2014
  24. Junio C HamanoDec 5, 2014
  25. Michael HaggertyDec 8, 2014
  26. ronnie sahlbergDec 5, 2014
  27. Michael HaggertyDec 8, 2014
  28. 08/23 Extract function should_expire_reflog_ent()Michael Haggerty, Dec 4, 2014
  29. Stefan BellerDec 8, 2014
  30. 09/23 expire_reflog(): extract two policy-related functionsMichael Haggerty, Dec 4, 2014
  31. Stefan BellerDec 5, 2014
  32. 10/23 expire_reflog(): add a "flags" argumentMichael Haggerty, Dec 4, 2014
  33. Stefan BellerDec 8, 2014
  34. 11/23 expire_reflog(): move dry_run to flags argumentMichael Haggerty, Dec 4, 2014
  35. Stefan BellerDec 8, 2014
  36. 12/23 expire_reflog(): move updateref to flags argumentMichael Haggerty, Dec 4, 2014
  37. Stefan BellerDec 8, 2014
  38. 13/23 Rename expire_reflog_cb to expire_reflog_policy_cbMichael Haggerty, Dec 4, 2014
  39. Stefan BellerDec 8, 2014
  40. 14/23 struct expire_reflog_cb: a new callback data typeMichael Haggerty, Dec 4, 2014
  41. Stefan BellerDec 8, 2014
  42. 15/23 expire_reflog(): pass flags through to expire_reflog_ent()Michael Haggerty, Dec 4, 2014
  43. Stefan BellerDec 8, 2014
  44. 16/23 expire_reflog(): move verbose to flags argumentMichael Haggerty, Dec 4, 2014
  45. Stefan BellerDec 8, 2014
  46. 17/23 expire_reflog(): move rewrite to flags argumentMichael Haggerty, Dec 4, 2014
  47. Stefan BellerDec 8, 2014
  48. 18/23 Move newlog and last_kept_sha1 to "struct expire_reflog_cb"Michael Haggerty, Dec 4, 2014
  49. Stefan BellerDec 8, 2014
  50. 19/23 expire_reflog(): treat the policy callback data as opaqueMichael Haggerty, Dec 4, 2014
  51. Stefan BellerDec 8, 2014
  52. 20/23 reflog_expire(): new function in the reference APIMichael Haggerty, Dec 4, 2014
  53. Stefan BellerDec 8, 2014
  54. Michael HaggertyDec 12, 2014
  55. Jeff KingDec 12, 2014
  56. Junio C HamanoDec 12, 2014
  57. 21/23 refs.c: remove unlock_ref/close_ref/commit_ref from the refs apiMichael Haggerty, Dec 4, 2014
  58. 22/23 lock_any_ref_for_update(): inline functionMichael Haggerty, Dec 4, 2014
  59. Stefan BellerDec 8, 2014
  60. Michael HaggertyDec 11, 2014
  61. 23/23 refs.c: don't expose the internal struct ref_lock in the header fileMichael Haggerty, Dec 4, 2014
  62. Junio C HamanoDec 4, 2014
  63. Stefan BellerDec 5, 2014

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.