From e6dee128a2e1cf051fd4f8f2ee810ee0a9a3c7c0 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Thu, 17 Sep 2020 02:34:00 +0200 Subject: main.rs: Error when more than one ref argument is given Since it doesn't really make sense to take multiple refs, don't allow more than one. We can only diff between two trees, and one is fixed as the workdir. Also learned that to get an exit code from a `system()` call in Perl, you have to shift `$?` by 8 (https://perldoc.perl.org/functions/system.html). --- src/main.rs | 4 ++- t/103-fails-with-more-than-one-ref-argument.t | 48 +++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 t/103-fails-with-more-than-one-ref-argument.t diff --git a/src/main.rs b/src/main.rs index efe4477..dd2da1c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -46,8 +46,10 @@ fn main() { process::exit(exitcode::USAGE); }, } + } else if matches.free.len() > 1 { + eprintln(&"too many ref arguments"); + process::exit(exitcode::USAGE); } else { - // TODO: error if more than one ref given let refname = &matches.free[0]; let object = match repo.revparse_single(&refname) { diff --git a/t/103-fails-with-more-than-one-ref-argument.t b/t/103-fails-with-more-than-one-ref-argument.t new file mode 100644 index 0000000..b376137 --- /dev/null +++ b/t/103-fails-with-more-than-one-ref-argument.t @@ -0,0 +1,48 @@ +#!/usr/bin/env perl -w + +use strict; + +use File::Copy; +use Test::More; + +use Bin qw($BIN); + +my $file = 'git-sugdiff.rs'; + +chdir 't-git-repo' or die $!; + +system('git checkout -b fork-point'); +ok !$?; + +open(my $input, '<', $file) or die $!; +open(my $output, '>', "$file.out") or die $!; + +while (<$input>) { + if ($. == 34) { + print $output " // TODO: 100-shows-todo-comments-since-fork-point\n"; + } + + print $output $_; +} + +close $input; +close $output; + +move("$file.out", $file) or die $!; + +system('git add git-sugdiff.rs'); +ok !$?; + +system('git commit -m "New TODO"'); +ok !$?; + +system("$BIN master fork-point"); +is $? & 64, 0; + + +# Teardown +system('git checkout master'); +system('git branch -D fork-point'); + + +done_testing; -- cgit v1.2.3