git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/18] Improve handling of D/F conflicts
@ 2015-05-01 12:25 Michael Haggerty
  2015-05-01 12:25 ` [PATCH 01/18] t1404: new tests of D/F conflicts within ref transactions Michael Haggerty
                   ` (18 more replies)
  0 siblings, 19 replies; 25+ messages in thread
From: Michael Haggerty @ 2015-05-01 12:25 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Stefan Beller, Jeff King, git, Michael Haggerty

We currently don't handle D/F conflicts very well.

A "D/F conflict" is what we call a conflict between references like
"refs/foo" and "refs/foo/bar". Such references cannot coexist because,
when stored as loose references, "refs/foo" would have to be both a
directory and a file.

The problems fixed by this series:

* We had no tests of D/F conflict handling within transactions.

* D/F conflicts between references being created in a single
  transaction used to be detected too late, possibly after part of the
  transaction had already been committed.

* D/F errors against loose references were typically reported as
  locking errors, which was not very illuminating. Also, D/F errors
  were typically reported in two separate error messages, like

      error: there are still refs under 'refs/foo'
      fatal: Cannot lock the ref 'refs/foo'.

  or

      error: unable to resolve reference refs/foo/bar: Not a directory
      fatal: Cannot lock the ref 'refs/foo/bar'.

  which was confusing.

There is probably still room for improving the error messages.

This patch series applies on top of
mh/ref-lock-avoid-running-out-of-fds. I did it that way because I
expected significant conflicts between the series, and the older
series is simple/mature enough that I expect it to be merged early in
the post-2.4 cycle. But in retrospect it turns out that there are only
minor conflicts between the two series. So if you would like me to
rebase this series to another starting point, please let me know.

This series is also available from my GitHub account,

    https://github.com/mhagger/git branch check-df-conflicts-earlier

Michael Haggerty (18):
  t1404: new tests of D/F conflicts within ref transactions
  is_refname_available(): explain the reason for an early exit
  is_refname_available(): avoid shadowing "dir" variable
  is_refname_available(): convert local variable "dirname" to strbuf
  entry_matches(): inline function
  report_refname_conflict(): inline function
  struct nonmatching_ref_data: store a refname instead of a ref_entry
  is_refname_available(): use dirname in first loop
  ref_transaction_commit(): use a string_list for detecting duplicates
  refs: check for D/F conflicts among refs processed in a transaction
  verify_refname_available(): rename function
  verify_refname_available(): report errors via a "struct strbuf *err"
  lock_ref_sha1_basic(): report errors via a "struct strbuf *err"
  lock_ref_sha1_basic(): improve diagnostics for D/F conflicts
  rename_ref(): integrate lock_ref_sha1_basic() errors into ours
  ref_transaction_commit(): provide better error messages
  ref_transaction_commit(): delete extra "the" from error message
  reflog_expire(): integrate lock_ref_sha1_basic() errors into ours

 refs.c                             | 280 +++++++++++++++++++++++--------------
 t/t1400-update-ref.sh              |  14 +-
 t/t1404-update-ref-df-conflicts.sh | 107 ++++++++++++++
 3 files changed, 286 insertions(+), 115 deletions(-)
 create mode 100755 t/t1404-update-ref-df-conflicts.sh

-- 
2.1.4

^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2015-05-05 17:40 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-01 12:25 [PATCH 00/18] Improve handling of D/F conflicts Michael Haggerty
2015-05-01 12:25 ` [PATCH 01/18] t1404: new tests of D/F conflicts within ref transactions Michael Haggerty
2015-05-05  5:12   ` Eric Sunshine
2015-05-05 15:27     ` Michael Haggerty
2015-05-01 12:25 ` [PATCH 02/18] is_refname_available(): explain the reason for an early exit Michael Haggerty
2015-05-01 17:21   ` Stefan Beller
2015-05-05 15:03     ` Michael Haggerty
2015-05-01 12:25 ` [PATCH 03/18] is_refname_available(): avoid shadowing "dir" variable Michael Haggerty
2015-05-01 12:25 ` [PATCH 04/18] is_refname_available(): convert local variable "dirname" to strbuf Michael Haggerty
2015-05-01 12:25 ` [PATCH 05/18] entry_matches(): inline function Michael Haggerty
2015-05-01 12:25 ` [PATCH 06/18] report_refname_conflict(): " Michael Haggerty
2015-05-01 12:25 ` [PATCH 07/18] struct nonmatching_ref_data: store a refname instead of a ref_entry Michael Haggerty
2015-05-01 12:25 ` [PATCH 08/18] is_refname_available(): use dirname in first loop Michael Haggerty
2015-05-01 12:25 ` [PATCH 09/18] ref_transaction_commit(): use a string_list for detecting duplicates Michael Haggerty
2015-05-01 12:25 ` [PATCH 10/18] refs: check for D/F conflicts among refs processed in a transaction Michael Haggerty
2015-05-01 12:25 ` [PATCH 11/18] verify_refname_available(): rename function Michael Haggerty
2015-05-01 12:25 ` [PATCH 12/18] verify_refname_available(): report errors via a "struct strbuf *err" Michael Haggerty
2015-05-01 12:25 ` [PATCH 13/18] lock_ref_sha1_basic(): " Michael Haggerty
2015-05-01 12:25 ` [PATCH 14/18] lock_ref_sha1_basic(): improve diagnostics for D/F conflicts Michael Haggerty
2015-05-01 12:25 ` [PATCH 15/18] rename_ref(): integrate lock_ref_sha1_basic() errors into ours Michael Haggerty
2015-05-01 12:25 ` [PATCH 16/18] ref_transaction_commit(): provide better error messages Michael Haggerty
2015-05-01 12:25 ` [PATCH 17/18] ref_transaction_commit(): delete extra "the" from error message Michael Haggerty
2015-05-01 12:25 ` [PATCH 18/18] reflog_expire(): integrate lock_ref_sha1_basic() errors into ours Michael Haggerty
2015-05-03  2:09 ` [PATCH 00/18] Improve handling of D/F conflicts Junio C Hamano
2015-05-05 16:12   ` Michael Haggerty

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 NNTP newsgroup(s).