git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: Brad King <brad.king@kitware.com>, Jeff King <peff@peff.net>,
	Vicent Marti <tanoku@gmail.com>,
	Johan Herland <johan@herland.net>,
	git@vger.kernel.org, Michael Haggerty <mhagger@alum.mit.edu>
Subject: [PATCH 00/26] Clean up update-refs --stdin and implement ref_transaction
Date: Mon, 10 Mar 2014 13:46:17 +0100	[thread overview]
Message-ID: <1394455603-2968-1-git-send-email-mhagger@alum.mit.edu> (raw)

I just sent an email to the list [1] describing how I want to
decouple reference-handling code from the rest of Git, and implement
pluggable reference storage backends.  This patch series is the first
movement in that direction.

update_refs() and "update-ref --stdin" implement the beginning of
transactions for git references, by allowing a group of reference
changes to be done in an all-or-nothing fashion.  The main point of
this patch series is to increase the abstraction level of the API for
dealing with reference transactions, by moving the handling of the
transaction to refs.c.  The new API for dealing with reference
transactions is

    ref_transaction *transaction = create_ref_transaction();
    queue_create_ref(transaction, refname, new_sha1, ...);
    queue_update_ref(transaction, refname, new_sha1, old_sha1, ...);
    queue_delete_ref(transaction, refname, old_sha1, ...);
    ...
    if (commit_ref_transaction(transaction, msg, ...))
        die(...);

When implementing this I found a number of minor problems in the
implementation of "git update-ref --stdin", not to mention that it
used "struct ref_update" all the way up and down its parser call
stack.  So most of the commits in this series are actually cleanups in
builtin/update-ref.c.  I also spend some time making the error
messages emitted by that command more uniform.

Then, in just a couple of commits, the ref_transaction abstraction is
introduced, update-ref is changed to use it, and update_refs() is
removed from the refs API (it was only used by this one caller).

Finally, now that refs.c owns the data structures for dealing with
transactions, it is possible to make a few simplifications.  More
changes in this neighborhood will be coming in future patches.

[1] http://article.gmane.org/gmane.comp.version-control.git/243726

Michael Haggerty (26):
  t1400: Fix name and expected result of one test
  t1400: Provide sensible input to the command
  t1400: Pass a legitimate <newvalue> to update command
  parse_arg(): Really test that argument is properly terminated
  t1400: Add some more tests involving quoted arguments
  refs.h: Rename the action_on_err constants
  update_refs(): Fix constness
  update-ref --stdin: Read the whole input at once
  parse_cmd_verify(): Copy old_sha1 instead of evaluating <oldvalue>
    twice
  update-ref.c: Extract a new function, parse_refname()
  update-ref --stdin: Improve error messages for invalid values
  update-ref --stdin: Make error messages more consistent
  update-ref --stdin: Simplify error messages for missing oldvalues
  update-ref.c: Extract a new function, parse_next_sha1()
  update-ref --stdin: Improve the error message for unexpected EOF
  update-ref --stdin: Harmonize error messages
  refs: Add a concept of a reference transaction
  update-ref --stdin: Reimplement using reference transactions
  refs: Remove API function update_refs()
  struct ref_update: Rename field "ref_name" to "refname"
  struct ref_update: Store refname as a FLEX_ARRAY.
  commit_ref_transaction(): Introduce temporary variables
  struct ref_update: Add a lock member
  struct ref_update: Add type field
  commit_ref_transaction(): Also free the ref_transaction
  commit_ref_transaction(): Work with transaction->updates in place

 builtin/checkout.c                     |   2 +-
 builtin/clone.c                        |   9 +-
 builtin/merge.c                        |   6 +-
 builtin/notes.c                        |   6 +-
 builtin/reset.c                        |   6 +-
 builtin/update-ref.c                   | 402 +++++++++++++++++++--------------
 contrib/examples/builtin-fetch--tool.c |   3 +-
 notes-cache.c                          |   2 +-
 notes-utils.c                          |   3 +-
 refs.c                                 | 184 +++++++++++----
 refs.h                                 |  93 ++++++--
 t/t1400-update-ref.sh                  |  86 ++++---
 12 files changed, 524 insertions(+), 278 deletions(-)

-- 
1.9.0

             reply	other threads:[~2014-03-10 12:46 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-10 12:46 Michael Haggerty [this message]
2014-03-10 12:46 ` [PATCH 01/26] t1400: Fix name and expected result of one test Michael Haggerty
2014-03-10 12:46 ` [PATCH 02/26] t1400: Provide sensible input to the command Michael Haggerty
2014-03-10 12:46 ` [PATCH 03/26] t1400: Pass a legitimate <newvalue> to update command Michael Haggerty
2014-03-10 17:03   ` Brad King
2014-03-10 21:38     ` Michael Haggerty
2014-03-11 12:49       ` Brad King
2014-03-11 20:06       ` Junio C Hamano
2014-03-11 21:41         ` Brad King
2014-03-20 17:01           ` Michael Haggerty
2014-03-10 12:46 ` [PATCH 04/26] parse_arg(): Really test that argument is properly terminated Michael Haggerty
2014-03-10 12:46 ` [PATCH 05/26] t1400: Add some more tests involving quoted arguments Michael Haggerty
2014-03-10 13:53   ` Johan Herland
2014-03-10 12:46 ` [PATCH 06/26] refs.h: Rename the action_on_err constants Michael Haggerty
2014-03-10 12:46 ` [PATCH 07/26] update_refs(): Fix constness Michael Haggerty
2014-03-10 12:46 ` [PATCH 08/26] update-ref --stdin: Read the whole input at once Michael Haggerty
2014-03-10 12:46 ` [PATCH 09/26] parse_cmd_verify(): Copy old_sha1 instead of evaluating <oldvalue> twice Michael Haggerty
2014-03-10 12:46 ` [PATCH 10/26] update-ref.c: Extract a new function, parse_refname() Michael Haggerty
2014-03-10 12:46 ` [PATCH 11/26] update-ref --stdin: Improve error messages for invalid values Michael Haggerty
2014-03-10 12:46 ` [PATCH 12/26] update-ref --stdin: Make error messages more consistent Michael Haggerty
2014-03-10 12:46 ` [PATCH 13/26] update-ref --stdin: Simplify error messages for missing oldvalues Michael Haggerty
2014-03-10 17:08   ` Brad King
2014-03-10 17:12     ` Brad King
2014-03-10 12:46 ` [PATCH 14/26] update-ref.c: Extract a new function, parse_next_sha1() Michael Haggerty
2014-03-10 12:46 ` [PATCH 15/26] update-ref --stdin: Improve the error message for unexpected EOF Michael Haggerty
2014-03-10 12:46 ` [PATCH 16/26] update-ref --stdin: Harmonize error messages Michael Haggerty
2014-03-10 12:46 ` [PATCH 17/26] refs: Add a concept of a reference transaction Michael Haggerty
2014-03-10 12:46 ` [PATCH 18/26] update-ref --stdin: Reimplement using reference transactions Michael Haggerty
2014-03-10 12:46 ` [PATCH 19/26] refs: Remove API function update_refs() Michael Haggerty
2014-03-10 12:46 ` [PATCH 20/26] struct ref_update: Rename field "ref_name" to "refname" Michael Haggerty
2014-03-10 12:46 ` [PATCH 21/26] struct ref_update: Store refname as a FLEX_ARRAY Michael Haggerty
2014-03-10 12:46 ` [PATCH 22/26] commit_ref_transaction(): Introduce temporary variables Michael Haggerty
2014-03-10 12:46 ` [PATCH 23/26] struct ref_update: Add a lock member Michael Haggerty
2014-03-10 12:46 ` [PATCH 24/26] struct ref_update: Add type field Michael Haggerty
2014-03-10 12:46 ` [PATCH 25/26] commit_ref_transaction(): Also free the ref_transaction Michael Haggerty
2014-03-10 12:46 ` [PATCH 26/26] commit_ref_transaction(): Work with transaction->updates in place Michael Haggerty
2014-03-10 17:44 ` [PATCH 00/26] Clean up update-refs --stdin and implement ref_transaction Brad King
2014-03-10 21:46   ` Michael Haggerty

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1394455603-2968-1-git-send-email-mhagger@alum.mit.edu \
    --to=mhagger@alum.mit.edu \
    --cc=brad.king@kitware.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=johan@herland.net \
    --cc=peff@peff.net \
    --cc=tanoku@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).