Skip to content

Commit

Permalink
Merge branch 'fl/send-email-outside'
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
Junio C Hamano committed Apr 9, 2008
2 parents 3ee5538 + ad79c02 commit 769f60a
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 36 deletions.
20 changes: 11 additions & 9 deletions git-send-email.perl
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,8 @@ sub format_2822_time {
# Example reply to:
#$initial_reply_to = ''; #<20050203173208.GA23964@foobar.com>';

my $repo = Git->repository();
my $repo = eval { Git->repository() };
my @repo = $repo ? ($repo) : ();
my $term = eval {
$ENV{"GIT_SEND_EMAIL_NOTTY"}
? new Term::ReadLine 'git-send-email', \*STDIN, \*STDOUT
Expand Down Expand Up @@ -271,25 +272,25 @@ sub read_config {

foreach my $setting (keys %config_bool_settings) {
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) {
my $target = $config_settings{$setting};
if (ref($target) eq "ARRAY") {
unless (@$target) {
my @values = $repo->config("$prefix.$setting");
my @values = Git::config(@repo, "$prefix.$setting");
@$target = @values if (@values && defined $values[0]);
}
}
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]
$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");

Expand Down Expand Up @@ -327,8 +328,9 @@ sub read_config {
}
}

my ($repoauthor) = $repo->ident_person('author');
my ($repocommitter) = $repo->ident_person('committer');
my ($repoauthor, $repocommitter);
($repoauthor) = Git::ident_person(@repo, 'author');
($repocommitter) = Git::ident_person(@repo, 'committer');

# Verify the user input

Expand Down Expand Up @@ -415,7 +417,7 @@ sub read_config {

my $prompting = 0;
if (!defined $sender) {
$sender = $repoauthor || $repocommitter;
$sender = $repoauthor || $repocommitter || '';

while (1) {
$_ = $term->readline("Who should the emails appear to be from? [$sender] ");
Expand Down Expand Up @@ -509,7 +511,7 @@ sub expand_aliases {
EOT
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);

open(C2,">",$compose_filename . ".final")
Expand Down
45 changes: 19 additions & 26 deletions perl/Git.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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
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.
=cut

sub config {
my ($self, $var) = @_;
$self->repo_path()
or throw Error::Simple("not a repository");
my ($self, $var) = _maybe_self(@_);

try {
my @cmd = ('config');
unshift @cmd, $self if $self;
if (wantarray) {
return $self->command('config', '--get-all', $var);
return command(@cmd, '--get-all', $var);
} else {
return $self->command_oneline('config', '--get', $var);
return command_oneline(@cmd, '--get', $var);
}
} catch Git::Error::Command with {
my $E = shift;
Expand All @@ -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,
of course).
Must be called on a repository instance.
This currently wraps command('config') so it is not so fast.
=cut

sub config_bool {
my ($self, $var) = @_;
$self->repo_path()
or throw Error::Simple("not a repository");
my ($self, $var) = _maybe_self(@_);

try {
my $val = $self->command_oneline('config', '--bool', '--get',
$var);
my @cmd = ('config', '--bool', '--get', $var);
unshift @cmd, $self if $self;
my $val = command_oneline(@cmd);
return undef unless defined $val;
return $val eq 'true';
} catch Git::Error::Command with {
Expand All @@ -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.
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.
=cut

sub config_int {
my ($self, $var) = @_;
$self->repo_path()
or throw Error::Simple("not a repository");
my ($self, $var) = _maybe_self(@_);

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 {
my $E = shift;
if ($E->value() == 1) {
Expand Down Expand Up @@ -639,15 +632,15 @@ The synopsis is like:
"$name <$email>" eq ident_person($name);
$time_tz =~ /^\d+ [+-]\d{4}$/;
Both methods must be called on a repository instance.
=cut

sub ident {
my ($self, $type) = @_;
my ($self, $type) = _maybe_self(@_);
my $identstr;
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 {
$identstr = $type;
}
Expand All @@ -659,8 +652,8 @@ sub ident {
}

sub ident_person {
my ($self, @ident) = @_;
$#ident == 0 and @ident = $self->ident($ident[0]);
my ($self, @ident) = _maybe_self(@_);
$#ident == 0 and @ident = $self ? $self->ident($ident[0]) : ident($ident[0]);
return "$ident[0] <$ident[1]>";
}

Expand Down
3 changes: 2 additions & 1 deletion var.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,12 @@ static int show_config(const char *var, const char *value)
int main(int argc, char **argv)
{
const char *val;
int nongit;
if (argc != 2) {
usage(var_usage);
}

setup_git_directory();
setup_git_directory_gently(&nongit);
val = NULL;

if (strcmp(argv[1], "-l") == 0) {
Expand Down

0 comments on commit 769f60a

Please sign in to comment.