mbox series

[v2,0/2] Retire git-parse-remote

Message ID 20201112203155.3342586-1-gitster@pobox.com (mailing list archive)
Headers show
Series Retire git-parse-remote | expand

Message

Junio C Hamano Nov. 12, 2020, 8:31 p.m. UTC
This is based on Ævar's 5-patch series, which removed unused bits
from git-parse-remote one by one, before finally moving the remnant
to the only user to remove the file.

Earlier I suggested an alternative arrangement of the series to just
lift what is still in use and then discard the rest without even
splitting them out into separate commits---it is easy to see what's
not used by grepping for names of the helper functions.

The only difference in the end result is that git-parse-remote.sh file
itself is also removed.

Ævar Arnfjörð Bjarmason (2):
  parse-remote: move used code to git-submodule.sh
  parse-remote: remove this now-unused library

 .gitignore                         |   1 -
 Documentation/git-parse-remote.txt |  23 -------
 Makefile                           |   2 -
 command-list.txt                   |   1 -
 git-parse-remote.sh                | 101 -----------------------------
 git-submodule.sh                   |   8 ++-
 6 files changed, 7 insertions(+), 129 deletions(-)
 delete mode 100644 Documentation/git-parse-remote.txt
 delete mode 100644 git-parse-remote.sh

Range-diff against v1:
1:  f8c1396d68 < -:  ---------- parse-remote: remove unused GIT_DIR variable
2:  5f2dac99b8 < -:  ---------- parse-remote: remove long-dead rebase code
3:  871a40c7e0 < -:  ---------- parse-remote: remove long-dead git-pull.sh code
4:  17b0d43b65 ! 1:  8d8de925ea parse-remote: move used code to git-submodule.sh
    @@ Metadata
      ## Commit message ##
         parse-remote: move used code to git-submodule.sh
     
    -    Move the only code in git-parse-remote.sh that was actually used to
    -    git-submodule.sh.
    +    Move the get_default_remote () helper from git-parse-remote.sh to
    +    git-submodule.sh, as the latter is the only user.
     
    -    This leaves just a comment in git-parse-remote.sh for ease of review,
    -    a later commit will remove it and its build system configuration.
    +    There are two more helper functions, get_remote_merge_branch() and
    +    error_on_missing_default_upstream(), in the git-parse-remote shell
    +    function library, but they are not referenced by git-submodule.sh;
    +    stop dot-sourcing the git-parse-remote.
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
     
      ## git-parse-remote.sh ##
     @@
    - # This is a shell library to calculate the remote repository and
    - # upstream branch that should be pulled by "git pull" from the current
    - # branch.
    --
    + # this would fail in that case and would issue an error message.
    + GIT_DIR=$(git rev-parse -q --git-dir) || :;
    + 
     -get_default_remote () {
     -	curr_branch=$(git symbolic-ref -q HEAD)
     -	curr_branch="${curr_branch#refs/heads/}"
     -	origin=$(git config --get "branch.$curr_branch.remote")
     -	echo ${origin:-origin}
     -}
    +-
    + get_remote_merge_branch () {
    + 	case "$#" in
    + 	0|1)
     
      ## git-submodule.sh ##
    +@@ git-submodule.sh: USAGE="[--quiet] [--cached]
    + OPTIONS_SPEC=
    + SUBDIRECTORY_OK=Yes
    + . git-sh-setup
    +-. git-parse-remote
    + require_work_tree
    + wt_prefix=$(git rev-parse --show-prefix)
    + cd_to_toplevel
     @@ git-submodule.sh: is_tip_reachable () (
      	test -z "$rev"
      )
5:  1bda9e4479 ! 2:  a7520d32df parse-remote: remove this now-unused library
    @@ Metadata
      ## Commit message ##
         parse-remote: remove this now-unused library
     
    -    Completely remove the git-parse-remote shellscript library.
    -
    -    Since e9460a66e0 ("parse-remote: support default reflist in
    -    get_remote_merge_branch", 2009-06-12) when there were around 300 lines
    -    of code here used by various core code everything in it has become
    -    unsued, and that unused code was removed in preceding commits. Almost
    -    all of its previous functionality has now been rewritten in C.
    +    Since the previous step stopped dot-sourcing it from
    +    git-submodule.sh, nothing uses git-parse-remote, which
    +    still has two unused functions.  Remove the dead code
    +    together with the file itself and documentation.
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
         Signed-off-by: Junio C Hamano <gitster@pobox.com>
    @@ command-list.txt: git-p4                                  foreignscminterface
      git-prune                               ancillarymanipulators   complete
      git-prune-packed                        plumbingmanipulators
     
    - ## git-submodule.sh ##
    -@@ git-submodule.sh: USAGE="[--quiet] [--cached]
    - OPTIONS_SPEC=
    - SUBDIRECTORY_OK=Yes
    - . git-sh-setup
    --. git-parse-remote
    - require_work_tree
    - wt_prefix=$(git rev-parse --show-prefix)
    - cd_to_toplevel
    + ## git-parse-remote.sh (deleted) ##
    +@@
    +-# This is a shell library to calculate the remote repository and
    +-# upstream branch that should be pulled by "git pull" from the current
    +-# branch.
    +-
    +-# git-ls-remote could be called from outside a git managed repository;
    +-# this would fail in that case and would issue an error message.
    +-GIT_DIR=$(git rev-parse -q --git-dir) || :;
    +-
    +-get_remote_merge_branch () {
    +-	case "$#" in
    +-	0|1)
    +-	    origin="$1"
    +-	    default=$(get_default_remote)
    +-	    test -z "$origin" && origin=$default
    +-	    curr_branch=$(git symbolic-ref -q HEAD) &&
    +-	    [ "$origin" = "$default" ] &&
    +-	    echo $(git for-each-ref --format='%(upstream)' $curr_branch)
    +-	    ;;
    +-	*)
    +-	    repo=$1
    +-	    shift
    +-	    ref=$1
    +-	    # FIXME: It should return the tracking branch
    +-	    #        Currently only works with the default mapping
    +-	    case "$ref" in
    +-	    +*)
    +-		ref=$(expr "z$ref" : 'z+\(.*\)')
    +-		;;
    +-	    esac
    +-	    expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:"
    +-	    remote=$(expr "z$ref" : 'z\([^:]*\):')
    +-	    case "$remote" in
    +-	    '' | HEAD ) remote=HEAD ;;
    +-	    heads/*) remote=${remote#heads/} ;;
    +-	    refs/heads/*) remote=${remote#refs/heads/} ;;
    +-	    refs/* | tags/* | remotes/* ) remote=
    +-	    esac
    +-	    [ -n "$remote" ] && case "$repo" in
    +-		.)
    +-		    echo "refs/heads/$remote"
    +-		    ;;
    +-		*)
    +-		    echo "refs/remotes/$repo/$remote"
    +-		    ;;
    +-	    esac
    +-	esac
    +-}
    +-
    +-error_on_missing_default_upstream () {
    +-	cmd="$1"
    +-	op_type="$2"
    +-	op_prep="$3" # FIXME: op_prep is no longer used
    +-	example="$4"
    +-	branch_name=$(git symbolic-ref -q HEAD)
    +-	display_branch_name="${branch_name#refs/heads/}"
    +-	# If there's only one remote, use that in the suggestion
    +-	remote="$(gettext "<remote>")"
    +-	branch="$(gettext "<branch>")"
    +-	if test $(git remote | wc -l) = 1
    +-	then
    +-		remote=$(git remote)
    +-	fi
    +-
    +-	if test -z "$branch_name"
    +-	then
    +-		gettextln "You are not currently on a branch."
    +-	else
    +-		gettextln "There is no tracking information for the current branch."
    +-	fi
    +-	case "$op_type" in
    +-	rebase)
    +-		gettextln "Please specify which branch you want to rebase against."
    +-		;;
    +-	merge)
    +-		gettextln "Please specify which branch you want to merge with."
    +-		;;
    +-	*)
    +-		echo >&2 "BUG: unknown operation type: $op_type"
    +-		exit 1
    +-		;;
    +-	esac
    +-	eval_gettextln "See git-\${cmd}(1) for details."
    +-	echo
    +-	echo "    $example"
    +-	echo
    +-	if test -n "$branch_name"
    +-	then
    +-		gettextln "If you wish to set tracking information for this branch you can do so with:"
    +-		echo
    +-		echo "    git branch --set-upstream-to=$remote/$branch $display_branch_name"
    +-		echo
    +-	fi
    +-	exit 1
    +-}

Comments

Jeff King Nov. 12, 2020, 8:49 p.m. UTC | #1
On Thu, Nov 12, 2020 at 12:31:53PM -0800, Junio C Hamano wrote:

> This is based on Ævar's 5-patch series, which removed unused bits
> from git-parse-remote one by one, before finally moving the remnant
> to the only user to remove the file.
> 
> Earlier I suggested an alternative arrangement of the series to just
> lift what is still in use and then discard the rest without even
> splitting them out into separate commits---it is easy to see what's
> not used by grepping for names of the helper functions.

FWIW, this arrangement makes much more sense to me. But I am happy with
either (as long as the file is fully deleted in the end ;) ).

-Peff
Junio C Hamano Nov. 12, 2020, 9:25 p.m. UTC | #2
Jeff King <peff@peff.net> writes:

> On Thu, Nov 12, 2020 at 12:31:53PM -0800, Junio C Hamano wrote:
>
>> This is based on Ævar's 5-patch series, which removed unused bits
>> from git-parse-remote one by one, before finally moving the remnant
>> to the only user to remove the file.
>> 
>> Earlier I suggested an alternative arrangement of the series to just
>> lift what is still in use and then discard the rest without even
>> splitting them out into separate commits---it is easy to see what's
>> not used by grepping for names of the helper functions.
>
> FWIW, this arrangement makes much more sense to me. But I am happy with
> either (as long as the file is fully deleted in the end ;) ).

Yeah, one thing I screwed up was that I moved and not copied the
still-used helper in [1/2].  For that to be a sensible change, we
must know nobody uses the helper from git-parse-remote but the
explanation for it would say that nothing dot-sources it and at that
point there is no point to have these changes in two patches ;-)

But as long as the endgame state is sensible, it does not make too
much of a difference.
Ævar Arnfjörð Bjarmason Nov. 13, 2020, 9:42 a.m. UTC | #3
On Thu, Nov 12 2020, Junio C Hamano wrote:

> This is based on Ævar's 5-patch series, which removed unused bits
> from git-parse-remote one by one, before finally moving the remnant
> to the only user to remove the file.

I was planning to re-roll this myself today, but I see you beat me to
it. This version looks good to me.