git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Rubén Justo" <rjusto@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
	"Rubén Justo via GitGitGadget" <gitgitgadget@gmail.com>,
	git@vger.kernel.org
Subject: Re: [PATCH] branch: allow "-" as a short-hand for "previous branch"
Date: Thu, 25 Aug 2022 21:50:31 +0200	[thread overview]
Message-ID: <b5076054-1be6-1dc5-868a-05005a594b0d@gmail.com> (raw)
In-Reply-To: <xmqqo7w82sx1.fsf@gitster.g>


On 8/25/22 6:23 PM, Junio C Hamano wrote:
> Rubén Justo <rjusto@gmail.com> writes:
> 
>> struct rev_info *revs, struct s
>>                  revarg_opt |= REVARG_CANNOT_BE_FILENAME;
>>          for (left = i = 1; i < argc; i++) {
>>                  const char *arg = argv[i];
>> -               if (!seen_end_of_options && *arg == '-') {
>> +               if (!seen_end_of_options && *arg == '-' &&
>> !strchr(".^~:@", arg[1])) {
> 
> Yuck.  I really didn't want to see that strchr() or any other logic
> that _knows_ what letter is allowed after a "rev".  It will be
> impossible to keep it in sync with the real code paths that needs to
> know and parses these syntactical constructs, and folks new to the
> codebase will never be able to tell at a first glance if the above
> is sufficient (or what the strchr() is doing).
> 

Some logic is needed to disambiguate from options. It is difficult than 
that set of chars changes, they are all around the code. And if any new 
is added should be reviewed and hopefully some test will be broken.

Maybe a more centralized approach?

diff --git a/parse-options.c b/parse-options.c
index 2757bd94c1..303854e8a4 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -740,7 +741,7 @@ enum parse_opt_result parse_options_step(struct 
parse_opt_ctx_t *ctx,
                     ctx->argc != ctx->total)
                         break;

-               if (*arg != '-' || strchr(".^~:@", arg[1])) {
+               if (*arg != '-' || 
!check_refchar_component_special(arg[1])) {
                         if (parse_nodash_opt(ctx, arg, options) == 0)
                                 continue;
                         if (ctx->flags & PARSE_OPT_STOP_AT_NON_OPTION)


diff --git a/refs.c b/refs.c
index 0ed9f99ccc..5327a8ec1f 100644
--- a/refs.c
+++ b/refs.c
@@ -159,6 +159,32 @@ static int check_refname_component(const char 
*refname, int *flags,
         return cp - refname;
  }

+int check_refchar_component_special(char refchar)
+{
+        int ch = refchar & 255;
+        unsigned char disp = refname_disposition[ch];
+
+        switch (disp) {
+        case 1:
+                /* end of component */
+                return 0;
+        case 2:
+                /* ".." components */
+                return 0;
+        case 3:
+                /* "@{" components */
+                return 0;
+        case 4:
+                /* forbidden char */
+                return 0;
+        case 5:
+                /* pattern */
+                return 0;
+        }
+
+        return -1;
+}
+
  static int check_or_sanitize_refname(const char *refname, int flags,
                                      struct strbuf *sanitized)
  {

  reply	other threads:[~2022-08-25 19:50 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-07 22:22 [PATCH] branch: allow "-" as a short-hand for "previous branch" Rubén Justo via GitGitGadget
2022-08-08 13:26 ` Johannes Schindelin
2022-08-08 16:06   ` Junio C Hamano
2022-08-13  9:19     ` Rubén Justo
2022-08-13 22:28       ` Junio C Hamano
2022-08-16  9:49     ` Johannes Schindelin
2022-08-19 13:05       ` Johannes Schindelin
2022-08-19 18:11         ` Junio C Hamano
2022-08-25  7:57         ` Rubén Justo
2022-08-25 16:23           ` Junio C Hamano
2022-08-25 19:50             ` Rubén Justo [this message]
2022-08-13  9:08   ` Rubén Justo
2022-08-08 14:46 ` Junio C Hamano
2022-08-13  9:14   ` Rubén Justo
2022-08-16  9:31     ` Johannes Schindelin
2022-08-16 17:03       ` Rubén Justo
2022-08-19 11:42         ` Johannes Schindelin
2022-08-16 17:11 ` [PATCH v2] allow "-" as short-hand for "@{-1}" in "branch -d" Rubén Justo via GitGitGadget
2022-08-16 18:55   ` Junio C Hamano
2022-08-16 21:27     ` Rubén Justo
2022-08-16 21:18 ` [PATCH v3] branch: allow "-" as a short-hand for "previous branch" Rubén Justo
2022-09-11 14:14 ` [PATCH v4] branch: allow "-" as a shortcut " Rubén Justo
2022-09-12 17:52   ` Junio C Hamano
2022-09-12 21:18     ` Rubén Justo

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=b5076054-1be6-1dc5-868a-05005a594b0d@gmail.com \
    --to=rjusto@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=gitster@pobox.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).