#!/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 . # 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; print "Can't exec 'gitc-$command'. Did you mean git $command? [y/n] "; $input = ; chomp $input; if ($input =~ /^(y)(es)?$/i) { my $cmd = "git $command " . join ' ', @ARGV; print "> $cmd\n"; exec $cmd; } } else { print "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 =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