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

Re: [PATCH/RFCv5 3/3] git rebase -i: add static check for commands and SHA-1

From
Remi Galan Alfonso <remi.galan-alfonso@ensimag.grenoble-inp.fr>
Date
Jun 10, 2015, 15:56 UTC
Message-ID
<58099623.334723.1433951804504.JavaMail.zimbra@ensimag.grenoble-inp.fr>
In-Reply-To
<vpq8ubrtws0.fsf@anie.imag.fr>
Show 20 quoted lines
> > +        git stripspace --strip-comments |
> > +        while read -r command sha1 rest
> > +        do
> > +                case $command in
> > +                ''|noop|x|"exec")
> > +                        ;;
> > +                pick|p|drop|d|reword|r|edit|e|squash|s|fixup|f)
> > +                        if test -z $sha1
> > +                        then
> > +                                echo "$command $rest" >>"$todo".badsha
> > +                        else
> > +                                sha1_verif="$(git rev-parse --verify --quiet $sha1^{commit})"
> > +                                if test -z $sha1_verif
> > +                                then
> > +                                        echo "$command $sha1 $rest" \
> > +                                                >>"$todo".badsha
> 
> When you reach the right end of your screen because of indentation,
> cutting lines with \ is rarely the best option. Having 5 levels of
> indentation is a sign that you should make more functions.

Yeah, I wasn't overly happy with that either, I will try to add some functions (your example seems like a good way of refactoring).

Show 16 quoted lines
> > +                                commit="$(git rev-list --oneline -1 --ignore-missing $sha1 2>/dev/null)"
> > +                                if test -z "$commit"
> > +                                then
> > +                                        echo "$command $sha1 $rest" \
> > +                                                >>"$todo".badcmd
> > +                                else
> > +                                        echo "$command $commit" >>"$todo".badcmd
> > +                                fi
> > +                        fi
> 
> What are you trying to do here? It seems that you are trying to recover
> the line, but the line is your input, you shouldn't have to recompute
> it.
> 
> Why isn't printf '%s %s %s' "$command" "$sha1" "$rest" sufficient in all
> cases?

It is mainly because here the SHA-1 is a long one (40 chars), however I agree that computing short_sha1 and then printf '%s %s %s' "$command" "$short_sha1" "$rest" should be good in this case.

Show 10 quoted lines
> Maybe it would be better to read line by line (to avoid loosing
> whitespace information for example), like
> 
>         while read -r line
>         do
>                 printf '%s' "$line" | read -r cmd sha1 rest
>                 case $sha1 in
>                         ...
> 
> or maybe it's overkill.

Could be a good idea, though I am not completely convinced about it yet.

Noted for the other points.

Thanks, Rémi

Previous: Matthieu MoyNext: Matthieu Moy
Message 9 of 12 in “git-rebase -i: add command "drop" to remove a commit”
  1. 1/3 git-rebase -i: add command "drop" to remove a commitGalan Rémi, Jun 10, 2015
  2. 2/3 git rebase -i: warn about removed commitsGalan Rémi, Jun 10, 2015
  3. Matthieu MoyJun 10, 2015
  4. Remi Galan AlfonsoJun 10, 2015
  5. Matthieu MoyJun 10, 2015
  6. Remi Galan AlfonsoJun 10, 2015
  7. 3/3 git rebase -i: add static check for commands and SHA-1Galan Rémi, Jun 10, 2015
  8. Matthieu MoyJun 10, 2015
  9. Remi Galan AlfonsoJun 10, 2015
  10. Matthieu MoyJun 10, 2015
  11. Remi Galan AlfonsoJun 13, 2015
  12. Matthieu MoyJun 15, 2015

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.