aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authoreschnett <eschnett@83718e91-0e4f-0410-abf4-91180603181f>2011-11-14 15:06:17 +0000
committereschnett <eschnett@83718e91-0e4f-0410-abf4-91180603181f>2011-11-14 15:06:17 +0000
commitb379fef2660ff2add91076f7c74e3f29e0fa9b1a (patch)
treefaff89db1427493c286620761d6f0b3ff9b5b9d8 /src/util
parent6345342a5de31761b11e1c880f6ec72a97d70c1b (diff)
Support a "local repository" that collects all machine-local repositories
Support a "local git repository" that collects all machine-local git repositories. This is stored in sourcebasedir, which is taken from Simfactory's MDB. git-svn-id: http://svn.cactuscode.org/arrangements/CactusUtils/Formaline/trunk@214 83718e91-0e4f-0410-abf4-91180603181f
Diffstat (limited to 'src/util')
-rwxr-xr-xsrc/util/git-gc-repo.pl2
-rwxr-xr-xsrc/util/git-get-localdir.pl55
-rwxr-xr-xsrc/util/git-init-local-repo.pl77
-rwxr-xr-xsrc/util/git-init-master-repo.pl2
-rwxr-xr-xsrc/util/git-init-repo.pl2
-rwxr-xr-xsrc/util/git-push-everything.pl26
6 files changed, 160 insertions, 4 deletions
diff --git a/src/util/git-gc-repo.pl b/src/util/git-gc-repo.pl
index d232cde..6b602d1 100755
--- a/src/util/git-gc-repo.pl
+++ b/src/util/git-gc-repo.pl
@@ -1,7 +1,7 @@
#! /usr/bin/perl -w
# Collect garbage in the repository if it grown in size by more than a
-# factor of 10.
+# factor of two.
# 2010-01-29 Erik Schnetter <schnetter@cct.lsu.edu>
diff --git a/src/util/git-get-localdir.pl b/src/util/git-get-localdir.pl
new file mode 100755
index 0000000..97e9872
--- /dev/null
+++ b/src/util/git-get-localdir.pl
@@ -0,0 +1,55 @@
+#! /usr/bin/perl -w
+
+# Determine the local git repository directory
+
+# 2011-11-13 Erik Schnetter <eschnetter@perimeterinstitute.ca>
+
+use strict;
+
+
+
+$#ARGV == 0 or die;
+my ($git_cmd) = @ARGV;
+
+my $CCTK_HOME = $ENV{'CCTK_HOME'};
+
+# Path where the git-*.pl commands are installed
+my $bindir = $ENV{'SCRATCH_BUILD'} . '/Formaline/bin';
+
+my $silent = $ENV{'SILENT'};
+$silent = 'yes' if ! defined $silent;
+$silent = $silent !~ /^no$/i;
+my $silencer = $silent ? '> /dev/null 2>&1' : '';
+
+
+
+# Obtain local machine name
+my $machine = `cd ${CCTK_HOME} && ${CCTK_HOME}/bin/sim whoami`;
+chomp $machine;
+$machine =~ s{Current machine:\s*(.*)}{$1};
+exit 0 if $machine eq '';
+
+# Obtain sourcebasedir
+my @mdb=`cd ${CCTK_HOME} && ${CCTK_HOME}/bin/sim print-mdb "${machine}"`;
+@mdb = grep m{^\s*sourcebasedir\s*=}, @mdb;
+exit 1 if @mdb != 1;
+my $sourcebasedir = $mdb[0];
+$sourcebasedir =~ s{^[^=]*=\s*(.*)}{$1};
+chomp $sourcebasedir;
+exit 0 if $sourcebasedir eq '';
+
+# Replace variables
+if ($ENV{'USER'}) {
+ my $USER = $ENV{'USER'};
+ $sourcebasedir =~ s{\@USER\@}{${USER}}g;
+}
+
+# Define local git repo name
+my $git_local_repo = "${sourcebasedir}/CactusSourceJar.git";
+
+# Create local git repo if it does not exist
+# (Don't print anything to stdout)
+system "${bindir}/git-init-local-repo.pl '$git_cmd' '$git_local_repo' >&2";
+
+# Output git repo name
+print "CACTUS_LOCAL_GIT_REPO='${git_local_repo}'\n";
diff --git a/src/util/git-init-local-repo.pl b/src/util/git-init-local-repo.pl
new file mode 100755
index 0000000..d9b7db9
--- /dev/null
+++ b/src/util/git-init-local-repo.pl
@@ -0,0 +1,77 @@
+#! /usr/bin/perl -w
+
+# Initialise the local repository
+
+# 2011-11-13 Erik Schnetter <eschnetter@perimeterinstitute.ca>
+
+use strict;
+
+
+
+$#ARGV == 1 or die;
+my ($git_cmd, $git_local_repo) = @ARGV;
+
+my $silent = $ENV{'SILENT'};
+$silent = 'yes' if ! defined $silent;
+$silent = $silent !~ /^no$/i;
+my $silencer = $silent ? '> /dev/null 2>&1' : '';
+
+
+
+# If the repository exists already, do nothing
+if (-e "$git_local_repo/.git") {
+ exit;
+}
+
+
+
+print "Formaline: Creating git local repository...\n";
+
+# Create the directory for the repository
+mkdir $git_local_repo;
+$ENV{'GIT_DIR'} = "$git_local_repo/.git";
+
+# Create the repository
+print "Executing: $git_cmd init-db\n" unless $silent;
+system "$git_cmd init-db $silencer";
+if ($?) {
+ die "Formaline: WARNING: Error while initialising local git repository\nCommand was\n $git_cmd init-db";
+}
+print "Executing: $git_cmd config receive.denyCurrentBranch false\n" unless $silent;
+system "$git_cmd config receive.denyCurrentBranch false $silencer";
+if ($?) {
+ die "Formaline: Error while configuring local git repository\nCommand was\n $git_cmd config receive.denyCurrentBranch false";
+}
+
+
+
+# Add a README
+open README, "> $git_local_repo/README" or die;
+my $today = `date`;
+chomp $today;
+print README "\
+This directory $git_local_repo
+is not empty -- it contains a git repository with the Cactus source
+trees of all previous builds, starting on $today.
+
+You can use the command \"git branch\" to list all configurations that
+are stored in this repository. The history of each branch is the
+sequence in which the configurations were built. The most recent
+build is stored in the branch head, as usual. In order to check out a
+certain branch into a directory <name>, issue the following commands:
+ cd <somewhere_else>
+ mkdir <name>
+ cd <name>
+ git init
+ git pull $git_local_repo <branch>
+
+You can also use the command \"git tag -l\" to list all builds that
+are stored in this repository. This keeps the source tree for each
+build directly accessible. In order to check out a certain tag into a
+directory <name>, issue the following commands:
+ cd <somewhere_else>
+ git clone -o <name> $git_local_repo
+ git checkout <tag>
+"
+ or die;
+close README or die;
diff --git a/src/util/git-init-master-repo.pl b/src/util/git-init-master-repo.pl
index 8330a1e..ef31159 100755
--- a/src/util/git-init-master-repo.pl
+++ b/src/util/git-init-master-repo.pl
@@ -48,9 +48,9 @@ if ($?) {
# Add a README
open README, "> $git_master_repo/README" or die;
my $today = `date`;
+chomp $today;
print README "\
This directory $git_master_repo
-
is not empty -- it contains a git repository with the Cactus source
trees of all previous builds, starting on $today.
diff --git a/src/util/git-init-repo.pl b/src/util/git-init-repo.pl
index a4d5d74..ab7d571 100755
--- a/src/util/git-init-repo.pl
+++ b/src/util/git-init-repo.pl
@@ -48,9 +48,9 @@ if ($?) {
# Add a README
open README, "> $git_repo/README" or die;
my $today = `date`;
+chomp $today;
print README "\
This directory $git_repo
-
is not empty -- it contains a git repository with the Cactus source
trees of all previous builds, starting on $today.
diff --git a/src/util/git-push-everything.pl b/src/util/git-push-everything.pl
index 10ad4dc..fb3782d 100755
--- a/src/util/git-push-everything.pl
+++ b/src/util/git-push-everything.pl
@@ -11,7 +11,8 @@ use strict;
$#ARGV == 2 or die;
my ($git_cmd, $git_repo, $git_master_repo) = @ARGV;
-# Central Cactus repository
+# Local and central Cactus repositories
+my $git_local_repo = $ENV{'CACTUS_LOCAL_GIT_REPO'};
my $git_central_repo = $ENV{'CACTUS_CENTRAL_GIT_REPO'};
# Path where the git-*.pl commands are installed
@@ -60,6 +61,29 @@ if ($?) {
+if (defined $git_local_repo) {
+ $ENV{'GIT_DIR'} = "$git_master_repo/.git";
+
+ print "Formaline: Pushing to local repository $git_local_repo...\n";
+
+ print "Executing: $git_cmd push -v -f --all '$git_local_repo'\n"
+ unless $silent;
+ system "$git_cmd push -v -f --all '$git_local_repo' $silencer";
+ if ($?) {
+ die "Could not push branches\nCommand was\n $git_cmd push -v -f --all '$git_local_repo'";
+ }
+
+ print "$git_cmd push -v -f --tags '$git_local_repo'\n" unless $silent;
+ system "$git_cmd push -v -f --tags '$git_local_repo' $silencer";
+ if ($?) {
+ die "Could not push tags\nCommand was\n $git_cmd push -v -f --tags '$git_local_repo'";
+ }
+
+ system "${bindir}/git-gc-repo.pl '$git_cmd' '$git_local_repo'";
+}
+
+
+
if (defined $git_central_repo) {
$ENV{'GIT_DIR'} = "$git_master_repo/.git";