]>
git.madduck.net Git - code/myrepos.git/blobdiff - mr
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
Checks out all the registered repositories that are not already checked
out.
Checks out all the registered repositories that are not already checked
out.
Displays a status report for each registered repository, showing what
uncommitted changes are present in the repository.
Displays a status report for each registered repository, showing what
uncommitted changes are present in the repository.
Commits changes to each registered repository. (By default, changes
are pushed to the remote repository too, when using distributed systems
Commits changes to each registered repository. (By default, changes
are pushed to the remote repository too, when using distributed systems
handlers for the "update", "status", and "commit" actions, so normally
you only need to specify what to do for "checkout".
handlers for the "update", "status", and "commit" actions, so normally
you only need to specify what to do for "checkout".
+The "alias" section allows adding aliases for commands. Each parameter
+is an alias, and its value is the command to run.
+
my $verbose=0;
my %config;
my %knownactions;
my $verbose=0;
my %config;
my %knownactions;
Getopt::Long::Configure("no_permute");
my $result=GetOptions(
Getopt::Long::Configure("no_permute");
my $result=GetOptions(
#print Dumper(\%config);
my $action=shift @ARGV;
#print Dumper(\%config);
my $action=shift @ARGV;
-if (! $knownactions{$action}) {
- my @matches = grep { /^\Q$action\E/ } keys %knownactions;
- if (@matches == 1) {
- $action=$matches[0];
+if (! exists $knownactions{$action}) {
+ if (exists $alias{$action}) {
+ $action=$alias{$action};
- die "mr: ambiguous action \"$action\" (matches @matches)\n";
+ my @matches = grep { /^\Q$action\E/ }
+ keys %knownactions, keys %alias;
+ if (@matches == 1) {
+ $action=$matches[0];
+ }
+ else {
+ die "mr: ambiguous action \"$action\" (matches @matches)\n";
+ }
print "\n" unless $first;
$first=0;
print "\n" unless $first;
$first=0;
- if (exists $config{$topdir}{$subdir}{skip}) {
- my $ret=system($config{$topdir}{$subdir}{skip});
- if ($ret >> 8 == 0) {
- print "mr $action: $dir skipped per config file\n" if $verbose;
- push @skipped, $dir;
- next;
- }
- }
-
action($action, $dir, $topdir, $subdir);
}
action($action, $dir, $topdir, $subdir);
}
sub action {
my ($action, $dir, $topdir, $subdir) = @_;
sub action {
my ($action, $dir, $topdir, $subdir) = @_;
+
+ my $lib= exists $config{$topdir}{$subdir}{lib} ?
+ $config{$topdir}{$subdir}{lib} : "";
if ($action eq 'checkout') {
if (-d $dir) {
if ($action eq 'checkout') {
if (-d $dir) {
- print "mr $action: $dir already exists, skipping checkout\n";
+ print "mr $action: $dir already exists, skipping checkout\n" if $verbose ;
push @skipped, $dir;
return;
}
$dir=~s/^(.*)\/[^\/]+\/?$/$1/;
}
push @skipped, $dir;
return;
}
$dir=~s/^(.*)\/[^\/]+\/?$/$1/;
}
- if ($action eq 'update') {
+ els if ($action eq 'update') {
if (! -d $dir) {
return action("checkout", $dir, $topdir, $subdir);
}
}
if (! -d $dir) {
return action("checkout", $dir, $topdir, $subdir);
}
}
if (! chdir($dir)) {
print STDERR "mr $action: failed to chdir to $dir: $!\n";
push @skipped, $dir;
}
if (! chdir($dir)) {
print STDERR "mr $action: failed to chdir to $dir: $!\n";
push @skipped, $dir;
}
- elsif (! exists $config{$topdir}{$subdir}{$action}) {
+
+ if (exists $config{$topdir}{$subdir}{skip}) {
+ my $ret=system($lib.$config{$topdir}{$subdir}{skip});
+ if ($ret >> 8 == 0) {
+ print "mr $action: $dir skipped per config file\n" if $verbose;
+ push @skipped, $dir;
+ return;
+ }
+ }
+
+ if (! exists $config{$topdir}{$subdir}{$action}) {
print STDERR "mr $action: no defined $action command for $topdir$subdir, skipping\n";
push @skipped, $dir;
}
else {
print "mr $action: in $dir\n";
print STDERR "mr $action: no defined $action command for $topdir$subdir, skipping\n";
push @skipped, $dir;
}
else {
print "mr $action: in $dir\n";
- my $command="set -e; ".
- (exists $config{$topdir}{$subdir}{lib} ?
- $config{$topdir}{$subdir}{lib} : "").
+ my $command="set -e; ".$lib.
"my_action(){ $config{$topdir}{$subdir}{$action} ; }; my_action ".
join(" ", map { s/\//\/\//g; s/"/\"/g; '"'.$_.'"' } @ARGV);
my $ret=system($command);
"my_action(){ $config{$topdir}{$subdir}{$action} ; }; my_action ".
join(" ", map { s/\//\/\//g; s/"/\"/g; '"'.$_.'"' } @ARGV);
my $ret=system($command);
if (! defined $section) {
die "$f line $.: parameter ($parameter) not in section\n";
}
if (! defined $section) {
die "$f line $.: parameter ($parameter) not in section\n";
}
- if (! exists $config{$dir}{$section} &&
- exists $config{$dir}{default}) {
+ if ($section ne 'alias' &&
+ ! exists $config{$dir}{$section} &&
+ exists $config{$dir}{default}) {
# copy in defaults
$config{$dir}{$section}={ %{$config{$dir}{default}} };
}
# copy in defaults
$config{$dir}{$section}={ %{$config{$dir}{default}} };
}
- if ($parameter ne 'lib') {
- $config{$dir}{$section}{$parameter}=$value;
- $knownactions{$parameter}=1;
+ if ($section eq 'alias') {
+ $alias{$parameter}=$value;
+ }
+ elsif ($parameter eq 'lib') {
+ $config{$dir}{$section}{lib}.=$value." ; ";
- $config{$dir}{$section}{$parameter}.=$value." ; ";
+ $config{$dir}{$section}{$parameter}=$value;
+ $knownactions{$parameter}=1;
+ if ($parameter eq 'chain' &&
+ length $dir && $section ne "default" &&
+ -e $dir.$section."/.mrconfig" &&
+ system($value) >> 8 == 0) {
+ push @toload, $dir.$section."/.mrconfig";
+ }
-
- if ($parameter eq 'chain' &&
- length $dir && $section ne "default" &&
- -e $dir.$section."/.mrconfig" &&
- system($value) >> 8 == 0) {
- push @toload, $dir.$section."/.mrconfig";
- }
- die "$f line $.: parse error\n";
+ die "$f line $.: parse error\n";
# Finally, some useful actions that mr knows about by default.
# These can be overridden in ~/.mrconfig.
__DATA__
# Finally, some useful actions that mr knows about by default.
# These can be overridden in ~/.mrconfig.
__DATA__
+[alias]
+ co = checkout
+ ci = commit
[default]
lib = \
error() { \
[default]
lib = \
error() { \