All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Johannes Schindelin <johannes.schindelin@gmx.de>,
	Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v2 0/2] Make git rebase -r's label generation more resilient
Date: Sun, 17 Nov 2019 23:16:08 +0000	[thread overview]
Message-ID: <pull.327.v2.git.1574032570.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.327.git.gitgitgadget@gmail.com>

Those labels must be valid ref names, and therefore valid file names. The
initial patch came in via Git for Windows.

Change since v1:

 * moved the entire sanitizing logic to label_oid(), as a preparatory step.

Johannes Schindelin (1):
  rebase-merges: move labels' whitespace mangling into `label_oid()`

Matthew Rogers (1):
  rebase -r: let `label` generate safer labels

 sequencer.c              | 72 +++++++++++++++++++++++++---------------
 t/t3430-rebase-merges.sh |  6 ++++
 2 files changed, 51 insertions(+), 27 deletions(-)


base-commit: d9f6f3b6195a0ca35642561e530798ad1469bd41
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-327%2Fdscho%2Ffix-rebase-r-labels-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-327/dscho/fix-rebase-r-labels-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/327

Range-diff vs v1:

 -:  ---------- > 1:  3f4d086e80 rebase-merges: move labels' whitespace mangling into `label_oid()`
 1:  4a02c38442 ! 2:  adc22c8ba2 rebase -r: let `label` generate safer labels
     @@ -1,14 +1,15 @@
     -Author: Matt R <mattr94@gmail.com>
     +Author: Matthew Rogers <mattr94@gmail.com>
      
          rebase -r: let `label` generate safer labels
      
          The `label` todo command in interactive rebases creates temporary refs
          in the `refs/rewritten/` namespace. These refs are stored as loose refs,
          i.e. as files in `.git/refs/rewritten/`, therefore they have to conform
     -    with file name limitations on the current filesystem.
     +    with file name limitations on the current filesystem in addition to the
     +    accepted ref format.
      
     -    This poses a problem in particular on NTFS/FAT, where e.g. the colon
     -    character is not a valid part of a file name.
     +    This poses a problem in particular on NTFS/FAT, where e.g. the colon,
     +    double-quote and pipe characters are disallowed as part of a file name.
      
          Let's safeguard against this by replacing not only white-space
          characters by dashes, but all non-alpha-numeric ones.
     @@ -23,8 +24,8 @@
       --- a/sequencer.c
       +++ b/sequencer.c
      @@
     - 		else
     - 			strbuf_addbuf(&label, &oneline);
     + 	} else {
     + 		struct strbuf *buf = &state->buf;
       
      +		/*
      +		 * Sanitize labels by replacing non-alpha-numeric characters
     @@ -36,18 +37,26 @@
      +		 * in file names. We do not validate the UTF-8 here, that's not
      +		 * the job of this function.
      +		 */
     - 		for (p1 = label.buf; *p1; p1++)
     --			if (isspace(*p1))
     -+			if (!(*p1 & 0x80) && !isalnum(*p1))
     - 				*(char *)p1 = '-';
     + 		for (; *label; label++)
     +-			strbuf_addch(buf, isspace(*label) ? '-' : *label);
     ++			if ((*label & 0x80) || isalnum(*label))
     ++				strbuf_addch(buf, *label);
     ++			/* avoid leading dash and double-dashes */
     ++			else if (buf->len && buf->buf[buf->len - 1] != '-')
     ++				strbuf_addch(buf, '-');
     ++		if (!buf->len) {
     ++			strbuf_addstr(buf, "rev-");
     ++			strbuf_add_unique_abbrev(buf, oid, default_abbrev);
     ++		}
     + 		label = buf->buf;
       
     - 		strbuf_reset(&buf);
     + 		if ((buf->len == the_hash_algo->hexsz &&
      
       diff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh
       --- a/t/t3430-rebase-merges.sh
       +++ b/t/t3430-rebase-merges.sh
      @@
     - 	test_path_is_missing .git/MERGE_HEAD
     + 	test_cmp expect G.t
       '
       
      +test_expect_success '--rebase-merges with commit that can generate bad characters for filename' '
     @@ -55,4 +64,5 @@
      +	git merge -m "colon: this should work" G &&
      +	git rebase --rebase-merges --force-rebase E
      +'
     ++
       test_done

-- 
gitgitgadget

  parent reply	other threads:[~2019-11-17 23:16 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-02 14:01 [PATCH 0/1] Make git rebase -r's label generation more resilient Johannes Schindelin via GitGitGadget
2019-09-02 14:01 ` [PATCH 1/1] rebase -r: let `label` generate safer labels Matt R via GitGitGadget
2019-09-02 17:57   ` Phillip Wood
2019-09-02 18:29     ` Junio C Hamano
2019-09-02 20:12       ` brian m. carlson
2019-09-02 21:24       ` Philip Oakley
     [not found]         ` <CAOjrSZtw+wYHxFRQCfb80xzm9OsGDh2rW8uD+AYYdmDPxk5DFQ@mail.gmail.com>
2019-09-02 22:13           ` Philip Oakley
2019-09-03 11:19       ` Johannes Schindelin
2019-09-03 19:51         ` Junio C Hamano
2019-09-03 22:40           ` Matt Rogers
2019-09-02 19:42     ` Johannes Schindelin
2019-09-03 18:10       ` Junio C Hamano
2019-11-18 20:51         ` Johannes Schindelin
2019-11-17 23:16 ` Johannes Schindelin via GitGitGadget [this message]
2019-11-17 23:16   ` [PATCH v2 1/2] rebase-merges: move labels' whitespace mangling into `label_oid()` Johannes Schindelin via GitGitGadget
2019-11-17 23:16   ` [PATCH v2 2/2] rebase -r: let `label` generate safer labels Matthew Rogers via GitGitGadget
2019-11-18  3:42   ` [PATCH v2 0/2] Make git rebase -r's label generation more resilient Junio C Hamano
2019-11-18 11:23     ` [PATCH] sequencer: handle rebase-merge for "onto" message Danh Doan
2019-11-18 11:57       ` [PATCH v2] sequencer: handle rebase-merges " Doan Tran Cong Danh
2019-11-18 20:15         ` Johannes Schindelin
2019-11-21  0:16       ` [PATCH] sequencer: handle rebase-merge " Junio C Hamano
2019-11-18 20:52     ` [PATCH v2 0/2] Make git rebase -r's label generation more resilient Johannes Schindelin

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

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

  git send-email \
    --in-reply-to=pull.327.v2.git.1574032570.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=johannes.schindelin@gmx.de \
    /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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.