—#!/usr/bin/perl
use
strict;
use
warnings;
# Copyright 2012 Grant Street Group, All Rights Reserved.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# PODNAME: gitc
# ABSTRACT: The root delegator of all other gitc commands
our
$VERSION
=
'0.60'
;
# VERSION
# generally /var/tmp has more space than /tmp It's possible that /tmp
# will get full. If '/var/tmp' doesn't exist on a particular machine,
# tmpdir() does the right thing and just defaults to /tmp. Of course, don't
# override if the user has already set TMPDIR to something he prefers
BEGIN {
$ENV
{TMPDIR} ||=
'/var/tmp'
};
# is it a built in command?
my
$command
=
shift
;
if
( not
defined
$command
) {
die
"Usage: gitc command\n"
;
}
# a bit hackish, but certain commands are quite useful to be able to run
# while a promotion is in progress
my
$check_suspended
= 1;
if
(
$command
=~ /^(show|
log
)$/) {
# however, don't let them run if they're going to update anything
my
$params
=
join
(
':'
,
@ARGV
);
$check_suspended
= 0
unless
$params
and
$params
=~ /(^|:)-{1,2}f/i;
# --fetch
}
# make sure no gitc commands are suspended
my
$suspend_file
=
'.git/gitc-suspended-process'
;
if
(
$check_suspended
and -e
$suspend_file
) {
open
my
$fh
,
'<'
,
$suspend_file
or
die
"Unable to open $suspend_file: $!\n"
;
chomp
(
my
$pid
= <
$fh
> );
chomp
(
my
$msg
= <
$fh
> );
close
$fh
;
die
"$msg\nThe suspended PID is $pid. `jobs -l` might help.\n"
.
"You can force your way through by deleting $suspend_file.\n"
;
}
# if this option is enabled then in the event a gitc command doesn't exist we will
# suggest the 'git' version of that command (if it exists)
my
$should_suggest
= `git config --get gitc.suggest-git-on-unknown-command |
tr
-d
'\\n'
` || 0;
if
(
$should_suggest
) {
my
$gitc_command_exists
= `which gitc-
$command
2>&1` !~ /
no
gitc-
$command
/;
my
$git_command_exists
= `git help -a|egrep
'^ [a-zA-Z0-9]'
|
grep
$command
`;
if
(
$gitc_command_exists
)
{
exec
"gitc-$command"
,
@ARGV
;
}
elsif
(
$git_command_exists
)
{
# the git version of $command exists. ask the user if they want to run it.
my
$input
;
"Can't exec 'gitc-$command'. Did you mean git $command? [y/n] "
;
$input
= <STDIN>;
chomp
$input
;
if
(
$input
=~ /^(y)(es)?$/i) {
my
$cmd
=
"git $command "
.
join
' '
,
@ARGV
;
"> $cmd\n"
;
exec
$cmd
;
}
}
else
{
"Can't exec 'gitc-$command' or 'git $command'.\n"
;
}
}
else
{
# suggest-git-on-failed-commend is not enabled
exec
"gitc-$command"
,
@ARGV
;
}
__END__
=pod
=head1 NAME
gitc - The root delegator of all other gitc commands
=head1 VERSION
version 0.60
=head1 AUTHOR
Grant Street Group <developers@grantstreet.com>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2013 by Grant Street Group.
This is free software, licensed under:
The GNU Affero General Public License, Version 3, November 2007
=cut