From 683b56791b4e8a29ff9bc98c7faff69d7854d845 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 23 Sep 2007 22:29:12 -0700 Subject: [PATCH] git-remote rm: add tests and minor fix-ups This fixes "git remote rm" which always exited with a failure, corrects indentation, and adds tests. Signed-off-by: Junio C Hamano --- git-remote.perl | 10 ++--- t/t5505-remote.sh | 100 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 6 deletions(-) create mode 100755 t/t5505-remote.sh diff --git a/git-remote.perl b/git-remote.perl index f513a8ad9..b7c1e01d7 100755 --- a/git-remote.perl +++ b/git-remote.perl @@ -317,7 +317,7 @@ sub update_remote { } sub rm_remote { - my ($name) = @_; + my ($name) = @_; if (!exists $remote->{$name}) { print STDERR "No such remote $name\n"; return; @@ -336,7 +336,7 @@ sub rm_remote { }; - my @refs = $git->command('for-each-ref', + my @refs = $git->command('for-each-ref', '--format=%(refname) %(objectname)', "refs/remotes/$name"); for (@refs) { ($ref, $object) = split; @@ -453,11 +453,9 @@ elsif ($ARGV[0] eq 'add') { elsif ($ARGV[0] eq 'rm') { if (@ARGV <= 1) { print STDERR "Usage: git remote rm \n"; + exit(1); } - else { - rm_remote($ARGV[1]); - } - exit(1); + rm_remote($ARGV[1]); } else { print STDERR "Usage: git remote\n"; diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh new file mode 100755 index 000000000..636aec2f7 --- /dev/null +++ b/t/t5505-remote.sh @@ -0,0 +1,100 @@ +#!/bin/sh + +test_description='git remote porcelain-ish' + +. ./test-lib.sh + +GIT_CONFIG=.git/config +export GIT_CONFIG + +setup_repository () { + mkdir "$1" && ( + cd "$1" && + git init && + >file && + git add file && + git commit -m "Initial" && + git checkout -b side && + >elif && + git add elif && + git commit -m "Second" && + git checkout master + ) +} + +tokens_match () { + echo "$1" | tr ' ' '\012' | sort | sed -e '/^$/d' >expect && + echo "$2" | tr ' ' '\012' | sort | sed -e '/^$/d' >actual && + diff -u expect actual +} + +check_remote_track () { + actual=$(git remote show "$1" | sed -n -e '$p') && + shift && + tokens_match "$*" "$actual" +} + +check_tracking_branch () { + f="" && + r=$(git for-each-ref "--format=%(refname)" | + sed -ne "s|^refs/remotes/$1/||p") && + shift && + tokens_match "$*" "$r" +} + +test_expect_success setup ' + + setup_repository one && + setup_repository two && + ( + cd two && git branch another + ) && + git clone one test + +' + +test_expect_success 'remote information for the origin' ' +( + cd test && + tokens_match origin "$(git remote)" && + check_remote_track origin master side && + check_tracking_branch origin HEAD master side +) +' + +test_expect_success 'add another remote' ' +( + cd test && + git remote add -f second ../two && + tokens_match "origin second" "$(git remote)" && + check_remote_track origin master side && + check_remote_track second master side another && + check_tracking_branch second master side another && + git for-each-ref "--format=%(refname)" refs/remotes | + sed -e "/^refs\/remotes\/origin\//d" \ + -e "/^refs\/remotes\/second\//d" >actual && + >expect && + diff -u expect actual +) +' + +test_expect_success 'remove remote' ' +( + cd test && + git remote rm second +) +' + +test_expect_success 'remove remote' ' +( + cd test && + tokens_match origin "$(git remote)" && + check_remote_track origin master side && + git for-each-ref "--format=%(refname)" refs/remotes | + sed -e "/^refs\/remotes\/origin\//d" >actual && + >expect && + diff -u expect actual +) +' + +test_done -- 2.26.2