diff options
author | Teddy Wing | 2020-10-07 20:56:00 +0200 |
---|---|---|
committer | Teddy Wing | 2020-10-07 20:56:00 +0200 |
commit | 255673b983a675e062eb0f3c4ea2017c47e048d1 (patch) | |
tree | af93d472742c5db70b7f79ab8215e6a2f696807e | |
parent | 651ad535a7890697b44a050e3150656b3782f541 (diff) | |
download | git-todo-255673b983a675e062eb0f3c4ea2017c47e048d1.tar.bz2 |
main(): Open repository even if PWD is a subdirectory
Previously, running `git todo` outside the root of the repository would
result in this error:
error: unable to open repository: could not find repository from '.'; class=Repository (6); code=NotFound (-3)
It turns out the `open()` method expects the given path to be the
repository root. Use `open_from_env()` instead, which functions more
like regular Git commands.
-rw-r--r-- | src/main.rs | 2 | ||||
-rw-r--r-- | t/104-works-outside-the-repo-root.t | 68 |
2 files changed, 69 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs index 1a41001..775dfae 100644 --- a/src/main.rs +++ b/src/main.rs @@ -50,7 +50,7 @@ fn main() { process::exit(exitcode::OK); } - let repo = match Repository::open(".") { + let repo = match Repository::open_from_env() { Ok(r) => r, Err(e) => { eprintln(&format!("unable to open repository: {}", e)); diff --git a/t/104-works-outside-the-repo-root.t b/t/104-works-outside-the-repo-root.t new file mode 100644 index 0000000..d61b5c6 --- /dev/null +++ b/t/104-works-outside-the-repo-root.t @@ -0,0 +1,68 @@ +#!/usr/bin/env perl -w + +# Copyright (c) 2020 Teddy Wing +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + + +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 !$?; + +mkdir 'subdir' or die $!; +chdir 'subdir' or die $!; + +my $todos = qx($BIN); +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; |