From 50b723148c7ffafe8b925516e7619408c34d574b Mon Sep 17 00:00:00 2001 From: "Jonathan \"Duke\" Leto" Date: Tue, 22 Feb 2011 02:07:26 -0800 Subject: Teach jitterbug about reusing git repos to save bandwidth --- config.yml | 1 + lib/jitterbug/Builder.pm | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/config.yml b/config.yml index cb1e111..27ccb38 100644 --- a/config.yml +++ b/config.yml @@ -30,6 +30,7 @@ jitterbug: on_pass_from_email: donotreply@example.com on_pass_header: on_pass_footer: + reuse_repo: 1 options: perlbrew: 1 email_on_pass: 0 diff --git a/lib/jitterbug/Builder.pm b/lib/jitterbug/Builder.pm index deb4c5b..14a7bc4 100644 --- a/lib/jitterbug/Builder.pm +++ b/lib/jitterbug/Builder.pm @@ -12,6 +12,7 @@ use Getopt::Long qw/:config no_ignore_case/; use File::Basename; use Git::Repository; use jitterbug::Schema; +use Cwd; #use Data::Dumper; local $| = 1; @@ -85,6 +86,7 @@ sub run_task { my ($task) = @_; my $desc = JSON::decode_json( $task->commit->content ); my $conf = $self->{'conf'}; + my $buildconf = $conf->{'jitterbug'}{'build_process'}; my $dt = DateTime->now(); $task->update({started_when => $dt}); @@ -101,16 +103,26 @@ sub run_task { $conf->{'jitterbug'}{'build'}{'dir'}, $task->project->name, ); - - debug("Removing $build_dir"); - rmtree($build_dir, { error => \my $err } ); - warn @$err if @$err; - + my ($r, $repo); + unless ($buildconf->{reuse_repo}) { + debug("Removing $build_dir"); + rmtree($build_dir, { error => \my $err } ); + warn @$err if @$err; + $repo = $task->project->url . '.git'; + $r = Git::Repository->create( clone => $repo => $build_dir ); + } else { + my $pwd = getcwd; + chdir $build_dir; + # TODO: Error Checking + debug("Cleaning git repo"); + system("git clean -dfx"); + debug("Rebasing new commits into $repo"); + system("git pull --rebase"); + chdir $pwd; + $r = Git::Repository->new( work_tree => $build_dir ); + } $self->sleep(1); # avoid race conditions - my $repo = $task->project->url . '.git'; - my $r = Git::Repository->create( clone => $repo => $build_dir ); - debug("Checking out " . $task->commit->sha256 . " from $repo into $build_dir\n"); $r->run( 'checkout', $task->commit->sha256 ); -- cgit 1.4.1