summaryrefslogtreecommitdiffstats
path: root/bin/git/git-re-edit
blob: 7172acdb7961cb4de4536e6d95e5f94779064177 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
#
# Still fails when files may contain spaces
#
# Run the editor on all the files that have been modified from the
# current index.  Useful to resume work when you left the working tree
# dirty.  Useful following a "git reset HEAD^" to continue work on the
# stuff you were working on before.  Useful following a failed merge.
#

chomp(my @changed = qx{git status --porcelain});
exit 1 unless $? == 0;
s/^.. // or die "<$_>???\n" for @changed;
die "Fucking shell, how does it work?\n"
    if grep / /, @changed;

@changed = qw(.) unless @changed;
chomp(my @lines = qx{find @changed -type f });
exit 1 unless $? == 0;

# maybe should use output of "git var GIT_EDITOR" here?
# But then I have to involve the !@&*!@*(&!@ shell
my $ed = $ENV{VISUAL} || $ENV{EDITOR} || "emacs";
exec $ed, @lines;
die "exec $ed: $!\n";