return $conflict if defined $conflict;
}
- rcs_add($params{file});
- return rcs_commit_staged(
- message => $params{message},
- session => $params{session},
- );
+ return rcs_commit_helper(@_);
}
sub rcs_commit_staged (@) {
# Commits all staged changes. Changes can be staged using rcs_add,
# rcs_remove, and rcs_rename.
+ return rcs_commit_helper(@_);
+}
+
+sub rcs_commit_helper (@) {
my %params=@_;
my %env=%ENV;
$params{message}.=".";
}
}
- push @opts, '-q';
- # git commit returns non-zero if file has not been really changed.
- # so we should ignore its exit status (hence run_or_non).
- if (run_or_non('git', 'commit', @opts, '-m', $params{message})) {
+ if (exists $params{file}) {
+ push @opts, '--', $params{file};
+ }
+ # git commit returns non-zero if nothing really changed.
+ # So we should ignore its exit status (hence run_or_non).
+ if (run_or_non('git', 'commit', '-m', $params{message}, '-q', @opts)) {
if (length $config{gitorigin_branch}) {
run_or_cry('git', 'push', $config{gitorigin_branch});
}
if (! keys %time_cache) {
my $date;
foreach my $line (run_or_die('git', 'log',
- '--pretty=format:%ct',
+ '--pretty=format:%at',
'--name-only', '--relative')) {
if (! defined $date && $line =~ /^(\d+)$/) {
$date=$line;
eval q{use File::Temp};
die $@ if $@;
my $fh;
- ($fh, $path)=File::Temp::tempfile("XXXXXXXXXX", UNLINK => 1);
+ ($fh, $path)=File::Temp::tempfile(undef, UNLINK => 1);
my $cmd = "cd $git_dir && ".
"git show $detail->{sha1_to} > '$path'";
if (system($cmd) != 0) {
# in order to see all changes.
my ($subdir, $rootdir) = git_find_root();
$git_dir=$rootdir;
- my @ret=git_parse_changes(git_commit_info($sha1, 1));
+ my @commits=git_commit_info($sha1, 1);
$git_dir=undef;
- return @ret;
+
+ if (! @commits) {
+ error "unknown commit"; # just in case
+ }
+
+ # git revert will fail on merge commits. Add a nice message.
+ if (exists $commits[0]->{parents} &&
+ @{$commits[0]->{parents}} > 1) {
+ error gettext("you are not allowed to revert a merge");
+ }
+
+ return git_parse_changes(@commits);
}
sub rcs_revert ($) {