aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2020-09-17 02:34:00 +0200
committerTeddy Wing2020-09-17 02:34:00 +0200
commite6dee128a2e1cf051fd4f8f2ee810ee0a9a3c7c0 (patch)
tree428082536ac362d2c2a1ed24dcc2941c8b91f4dc
parent664b4d1f0bca4891e06dc7a3cb179bed7a842bb1 (diff)
downloadgit-todo-e6dee128a2e1cf051fd4f8f2ee810ee0a9a3c7c0.tar.bz2
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).
-rw-r--r--src/main.rs4
-rw-r--r--t/103-fails-with-more-than-one-ref-argument.t48
2 files changed, 51 insertions, 1 deletions
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;