}
debug("No 'tree' seen in diff-tree output") if !defined $ci{'tree'};
-
+
if (defined $ci{'parents'}) {
$ci{'parent'} = @{ $ci{'parents'} }[0];
}
$ci{'parent'} = 0 x 40;
}
- # Commit message.
- while (my $line = shift @{ $dt_ref }) {
- if ($line =~ m/^$/) {
- # Trailing empty line signals next section.
- last;
- };
+ # Commit message (optional).
+ while ($dt_ref->[0] =~ /^ /) {
+ my $line = shift @{ $dt_ref };
$line =~ s/^ //;
push @{ $ci{'comment'} }, $line;
}
+ shift @{ $dt_ref } if $dt_ref->[0] =~ /^$/;
# Modified files.
while (my $line = shift @{ $dt_ref }) {
my $conflict = _merge_past($prev, $file, $dummy_commit_msg);
return $conflict if defined $conflict;
}
-
- # Set the commit author to the web committer.
+
+ rcs_add($file);
+ return rcs_commit_staged($message, $user, $ipaddr);
+} #}}}
+
+sub rcs_commit_staged ($$$) {
+ # Commits all staged changes. Changes can be staged using rcs_add,
+ # rcs_remove, and rcs_rename.
+ my ($message, $user, $ipaddr)=@_;
+
+ # Set the commit author and email to the web committer.
my %env=%ENV;
if (defined $user || defined $ipaddr) {
- $ENV{GIT_AUTHOR_NAME}=(defined $user ? $user : $ipaddr)." (web)";
- $ENV{GIT_AUTHOR_EMAIL}="";
+ my $u=defined $user ? $user : $ipaddr;
+ $ENV{GIT_AUTHOR_NAME}=$u;
+ $ENV{GIT_AUTHOR_EMAIL}="$u\@web";
}
# git commit returns non-zero if file has not been really changed.
# so we should ignore its exit status (hence run_or_non).
$message = possibly_foolish_untaint($message);
- if (run_or_non('git', 'commit', '--cleanup=verbatim', '-q', '-m', $message, '-i', $file)) {
+ if (run_or_non('git', 'commit', '--cleanup=verbatim',
+ '-q', '-m', $message)) {
if (length $config{gitorigin_branch}) {
run_or_cry('git', 'push', $config{gitorigin_branch});
}
%ENV=%env;
return undef; # success
-} #}}}
+}
sub rcs_add ($) { # {{{
# Add file to archive.
run_or_cry('git', 'add', $file);
} #}}}
+sub rcs_remove ($) { # {{{
+ # Remove file from archive.
+
+ my ($file) = @_;
+
+ run_or_cry('git', 'rm', '-f', $file);
+} #}}}
+
+sub rcs_rename ($$) { # {{{
+ my ($src, $dest) = @_;
+
+ run_or_cry('git', 'mv', '-f', $src, $dest);
+} #}}}
+
sub rcs_recentchanges ($) { #{{{
# List of recent changes.
my @rets;
foreach my $ci (git_commit_info('HEAD', $num)) {
# Skip redundant commits.
- next if (@{$ci->{'comment'}}[0] eq $dummy_commit_msg);
+ next if ($ci->{'comment'} && @{$ci->{'comment'}}[0] eq $dummy_commit_msg);
my ($sha1, $when) = (
$ci->{'sha1'},
}
my $user=$ci->{'author_username'};
- my $web_commit = ($user=~s/\s+\(web\)$//);
+ my $web_commit = ($ci->{'author'} =~ /\@web>/);
# compatability code for old web commit messages
if (! $web_commit &&
$messages[0]->{line} =~ m/$config{web_commit_regexp}/) {
$user = defined $2 ? "$2" : "$3";
$messages[0]->{line} = $4;
+ $web_commit=1;
}
push @rets, {