aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2020-09-17 01:33:27 +0200
committerTeddy Wing2020-09-17 01:33:27 +0200
commit9e910646a5c60007f10e8ea69a7120d50b4868e7 (patch)
treee549037f2036777b8a1e73e6d38e7010194b34b1
parent0c0072f1cd16850c648bd5ccd694971e4e24f5b4 (diff)
downloadgit-todo-9e910646a5c60007f10e8ea69a7120d50b4868e7.tar.bz2
main.rs: Fix ref parsing
Turns out `refname_to_id()` wasn't the right function to get a reference/oid/object from a ref name. Use `revparse_single()` instead to get a usable reference object. Add a test for custom diff bases.
-rw-r--r--src/main.rs6
-rw-r--r--t/102-accepts-ref-argument.t52
2 files changed, 55 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs
index 780ab62..4d810b0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -44,15 +44,15 @@ fn main() {
// TODO: error if more than one ref given
let refname = &matches.free[0];
- let oid = match repo.refname_to_id(&refname) {
- Ok(oid) => oid,
+ let object = match repo.revparse_single(&refname) {
+ Ok(object) => object,
Err(e) => {
eprintln(&e);
process::exit(exitcode::USAGE);
},
};
- match repo.find_tree(oid) {
+ match object.peel_to_tree() {
Ok(t) => t,
Err(e) => {
eprintln(&e);
diff --git a/t/102-accepts-ref-argument.t b/t/102-accepts-ref-argument.t
new file mode 100644
index 0000000..a7153df
--- /dev/null
+++ b/t/102-accepts-ref-argument.t
@@ -0,0 +1,52 @@
+#!/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 !$?;
+
+my $ref = qx(git rev-parse master);
+chomp $ref;
+
+my $todos = qx($BIN $ref);
+is $todos, 'git-sugdiff.rs:34: // TODO: 100-shows-todo-comments-since-fork-point
+';
+
+
+# Teardown
+system('git checkout master');
+system('git branch -D fork-point');
+
+
+done_testing;