Merge branch 'fl/send-email-outside'
* fl/send-email-outside: send-email: Don't require to be called in a repository Git.pm: Don't require repository instance for ident Git.pm: Don't require a repository instance for config var: Don't require to be in a git repository.
This commit is contained in:
@ -168,7 +168,8 @@ my $envelope_sender;
|
|||||||
# Example reply to:
|
# Example reply to:
|
||||||
#$initial_reply_to = ''; #<20050203173208.GA23964@foobar.com>';
|
#$initial_reply_to = ''; #<20050203173208.GA23964@foobar.com>';
|
||||||
|
|
||||||
my $repo = Git->repository();
|
my $repo = eval { Git->repository() };
|
||||||
|
my @repo = $repo ? ($repo) : ();
|
||||||
my $term = eval {
|
my $term = eval {
|
||||||
$ENV{"GIT_SEND_EMAIL_NOTTY"}
|
$ENV{"GIT_SEND_EMAIL_NOTTY"}
|
||||||
? new Term::ReadLine 'git-send-email', \*STDIN, \*STDOUT
|
? new Term::ReadLine 'git-send-email', \*STDIN, \*STDOUT
|
||||||
@ -271,25 +272,25 @@ sub read_config {
|
|||||||
|
|
||||||
foreach my $setting (keys %config_bool_settings) {
|
foreach my $setting (keys %config_bool_settings) {
|
||||||
my $target = $config_bool_settings{$setting}->[0];
|
my $target = $config_bool_settings{$setting}->[0];
|
||||||
$$target = $repo->config_bool("$prefix.$setting") unless (defined $$target);
|
$$target = Git::config_bool(@repo, "$prefix.$setting") unless (defined $$target);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $setting (keys %config_settings) {
|
foreach my $setting (keys %config_settings) {
|
||||||
my $target = $config_settings{$setting};
|
my $target = $config_settings{$setting};
|
||||||
if (ref($target) eq "ARRAY") {
|
if (ref($target) eq "ARRAY") {
|
||||||
unless (@$target) {
|
unless (@$target) {
|
||||||
my @values = $repo->config("$prefix.$setting");
|
my @values = Git::config(@repo, "$prefix.$setting");
|
||||||
@$target = @values if (@values && defined $values[0]);
|
@$target = @values if (@values && defined $values[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$$target = $repo->config("$prefix.$setting") unless (defined $$target);
|
$$target = Git::config(@repo, "$prefix.$setting") unless (defined $$target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# read configuration from [sendemail "$identity"], fall back on [sendemail]
|
# read configuration from [sendemail "$identity"], fall back on [sendemail]
|
||||||
$identity = $repo->config("sendemail.identity") unless (defined $identity);
|
$identity = Git::config(@repo, "sendemail.identity") unless (defined $identity);
|
||||||
read_config("sendemail.$identity") if (defined $identity);
|
read_config("sendemail.$identity") if (defined $identity);
|
||||||
read_config("sendemail");
|
read_config("sendemail");
|
||||||
|
|
||||||
@ -327,8 +328,9 @@ if (0) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my ($repoauthor) = $repo->ident_person('author');
|
my ($repoauthor, $repocommitter);
|
||||||
my ($repocommitter) = $repo->ident_person('committer');
|
($repoauthor) = Git::ident_person(@repo, 'author');
|
||||||
|
($repocommitter) = Git::ident_person(@repo, 'committer');
|
||||||
|
|
||||||
# Verify the user input
|
# Verify the user input
|
||||||
|
|
||||||
@ -415,7 +417,7 @@ if (@files) {
|
|||||||
|
|
||||||
my $prompting = 0;
|
my $prompting = 0;
|
||||||
if (!defined $sender) {
|
if (!defined $sender) {
|
||||||
$sender = $repoauthor || $repocommitter;
|
$sender = $repoauthor || $repocommitter || '';
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
$_ = $term->readline("Who should the emails appear to be from? [$sender] ");
|
$_ = $term->readline("Who should the emails appear to be from? [$sender] ");
|
||||||
@ -509,7 +511,7 @@ GIT: for the patch you are writing.
|
|||||||
EOT
|
EOT
|
||||||
close(C);
|
close(C);
|
||||||
|
|
||||||
my $editor = $ENV{GIT_EDITOR} || $repo->config("core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
|
my $editor = $ENV{GIT_EDITOR} || Git::config(@repo, "core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
|
||||||
system('sh', '-c', '$0 $@', $editor, $compose_filename);
|
system('sh', '-c', '$0 $@', $editor, $compose_filename);
|
||||||
|
|
||||||
open(C2,">",$compose_filename . ".final")
|
open(C2,">",$compose_filename . ".final")
|
||||||
|
45
perl/Git.pm
45
perl/Git.pm
@ -487,22 +487,20 @@ does. In scalar context requires the variable to be set only one time
|
|||||||
(exception is thrown otherwise), in array context returns allows the
|
(exception is thrown otherwise), in array context returns allows the
|
||||||
variable to be set multiple times and returns all the values.
|
variable to be set multiple times and returns all the values.
|
||||||
|
|
||||||
Must be called on a repository instance.
|
|
||||||
|
|
||||||
This currently wraps command('config') so it is not so fast.
|
This currently wraps command('config') so it is not so fast.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
sub config {
|
sub config {
|
||||||
my ($self, $var) = @_;
|
my ($self, $var) = _maybe_self(@_);
|
||||||
$self->repo_path()
|
|
||||||
or throw Error::Simple("not a repository");
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
my @cmd = ('config');
|
||||||
|
unshift @cmd, $self if $self;
|
||||||
if (wantarray) {
|
if (wantarray) {
|
||||||
return $self->command('config', '--get-all', $var);
|
return command(@cmd, '--get-all', $var);
|
||||||
} else {
|
} else {
|
||||||
return $self->command_oneline('config', '--get', $var);
|
return command_oneline(@cmd, '--get', $var);
|
||||||
}
|
}
|
||||||
} catch Git::Error::Command with {
|
} catch Git::Error::Command with {
|
||||||
my $E = shift;
|
my $E = shift;
|
||||||
@ -522,20 +520,17 @@ Retrieve the bool configuration C<VARIABLE>. The return value
|
|||||||
is usable as a boolean in perl (and C<undef> if it's not defined,
|
is usable as a boolean in perl (and C<undef> if it's not defined,
|
||||||
of course).
|
of course).
|
||||||
|
|
||||||
Must be called on a repository instance.
|
|
||||||
|
|
||||||
This currently wraps command('config') so it is not so fast.
|
This currently wraps command('config') so it is not so fast.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
sub config_bool {
|
sub config_bool {
|
||||||
my ($self, $var) = @_;
|
my ($self, $var) = _maybe_self(@_);
|
||||||
$self->repo_path()
|
|
||||||
or throw Error::Simple("not a repository");
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
my $val = $self->command_oneline('config', '--bool', '--get',
|
my @cmd = ('config', '--bool', '--get', $var);
|
||||||
$var);
|
unshift @cmd, $self if $self;
|
||||||
|
my $val = command_oneline(@cmd);
|
||||||
return undef unless defined $val;
|
return undef unless defined $val;
|
||||||
return $val eq 'true';
|
return $val eq 'true';
|
||||||
} catch Git::Error::Command with {
|
} catch Git::Error::Command with {
|
||||||
@ -557,19 +552,17 @@ or 'g' in the config file will cause the value to be multiplied
|
|||||||
by 1024, 1048576 (1024^2), or 1073741824 (1024^3) prior to output.
|
by 1024, 1048576 (1024^2), or 1073741824 (1024^3) prior to output.
|
||||||
It would return C<undef> if configuration variable is not defined,
|
It would return C<undef> if configuration variable is not defined,
|
||||||
|
|
||||||
Must be called on a repository instance.
|
|
||||||
|
|
||||||
This currently wraps command('config') so it is not so fast.
|
This currently wraps command('config') so it is not so fast.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
sub config_int {
|
sub config_int {
|
||||||
my ($self, $var) = @_;
|
my ($self, $var) = _maybe_self(@_);
|
||||||
$self->repo_path()
|
|
||||||
or throw Error::Simple("not a repository");
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return $self->command_oneline('config', '--int', '--get', $var);
|
my @cmd = ('config', '--int', '--get', $var);
|
||||||
|
unshift @cmd, $self if $self;
|
||||||
|
return command_oneline(@cmd);
|
||||||
} catch Git::Error::Command with {
|
} catch Git::Error::Command with {
|
||||||
my $E = shift;
|
my $E = shift;
|
||||||
if ($E->value() == 1) {
|
if ($E->value() == 1) {
|
||||||
@ -639,15 +632,15 @@ The synopsis is like:
|
|||||||
"$name <$email>" eq ident_person($name);
|
"$name <$email>" eq ident_person($name);
|
||||||
$time_tz =~ /^\d+ [+-]\d{4}$/;
|
$time_tz =~ /^\d+ [+-]\d{4}$/;
|
||||||
|
|
||||||
Both methods must be called on a repository instance.
|
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
sub ident {
|
sub ident {
|
||||||
my ($self, $type) = @_;
|
my ($self, $type) = _maybe_self(@_);
|
||||||
my $identstr;
|
my $identstr;
|
||||||
if (lc $type eq lc 'committer' or lc $type eq lc 'author') {
|
if (lc $type eq lc 'committer' or lc $type eq lc 'author') {
|
||||||
$identstr = $self->command_oneline('var', 'GIT_'.uc($type).'_IDENT');
|
my @cmd = ('var', 'GIT_'.uc($type).'_IDENT');
|
||||||
|
unshift @cmd, $self if $self;
|
||||||
|
$identstr = command_oneline(@cmd);
|
||||||
} else {
|
} else {
|
||||||
$identstr = $type;
|
$identstr = $type;
|
||||||
}
|
}
|
||||||
@ -659,8 +652,8 @@ sub ident {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub ident_person {
|
sub ident_person {
|
||||||
my ($self, @ident) = @_;
|
my ($self, @ident) = _maybe_self(@_);
|
||||||
$#ident == 0 and @ident = $self->ident($ident[0]);
|
$#ident == 0 and @ident = $self ? $self->ident($ident[0]) : ident($ident[0]);
|
||||||
return "$ident[0] <$ident[1]>";
|
return "$ident[0] <$ident[1]>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
var.c
3
var.c
@ -51,11 +51,12 @@ static int show_config(const char *var, const char *value)
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
const char *val;
|
const char *val;
|
||||||
|
int nongit;
|
||||||
if (argc != 2) {
|
if (argc != 2) {
|
||||||
usage(var_usage);
|
usage(var_usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_git_directory();
|
setup_git_directory_gently(&nongit);
|
||||||
val = NULL;
|
val = NULL;
|
||||||
|
|
||||||
if (strcmp(argv[1], "-l") == 0) {
|
if (strcmp(argv[1], "-l") == 0) {
|
||||||
|
Reference in New Issue
Block a user