xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Ian Jackson <ian.jackson@eu.citrix.com>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Ian Campbell <ian.campbell@citrix.com>
Subject: [OSSTEST PATCH 04/13] BuildSupport: Provide some support for git submodules
Date: Fri, 16 May 2014 19:01:31 +0100	[thread overview]
Message-ID: <1400263300-22903-5-git-send-email-ian.jackson@eu.citrix.com> (raw)
In-Reply-To: <1400263300-22903-1-git-send-email-ian.jackson@eu.citrix.com>

* Provide a new "submodulefixup" function which, given a cloned
  tree which has submodules:
    - massages the .gitmodules file according to the tree_*
      runvars and massage_url
    - arranges for the submodules to be fetched and checked out
    - stores the revisions of the submodules, as necessary
    - honours any revision_ tags for the submodules
    - allows the caller to give the submodules names which are
      suitable for use in runvars etc. (and might differ from
      the names or paths used in the supermodule)

* In a submodule, .git is actually a file containing a reference
  to a subdirectory of the main git tree.  Cope with that.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
---
 Osstest/BuildSupport.pm |   60 +++++++++++++++++++++++++++++++++++++++++++++++
 Osstest/TestSupport.pm  |    2 +-
 2 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/Osstest/BuildSupport.pm b/Osstest/BuildSupport.pm
index 1b15557..9a43f00 100644
--- a/Osstest/BuildSupport.pm
+++ b/Osstest/BuildSupport.pm
@@ -43,6 +43,8 @@ BEGIN {
                       xendist
                       $xendist
 
+                      submodulefixup
+
                       );
     %EXPORT_TAGS = ( );
 
@@ -90,4 +92,62 @@ sub xendist () {
     target_cmd($ho, "tar -C $xendist -hzxf $distcopy", 300);
 }
 
+#----- submodules -----
+
+sub submodulefixup ($$$$) {
+    my ($ho, $subdir, $basewhich, $submodmap) = @_;
+
+    my @submodules;
+    target_editfile($ho, "$builddir/$subdir/.gitmodules",
+		    "$subdir-gitmodules", sub {
+        my $submod;
+	my $log1 = sub { logm("submodule $submod->{OurName} @_"); };
+        while (<::EI>) {
+	    if (m/^\[submodule \"(.*)\"\]$/) {
+		$submod = { TheirName => $1 },
+		push @submodules, $submod;
+		my $mapped = $submodmap->{$1};
+		die "unknown submodule $1" unless defined $mapped;
+		$submod->{OurName} = $mapped;
+		$log1->("($submod->{TheirName}):");
+	    } elsif (m/^\s*path\s*=\s*(\S+)/) {
+		die unless $submod;
+		$submod->{Path} = $1;
+		$log1->("  subpath=$submod->{Path}");
+	    } elsif (m/^(\s*url\s*\=\s*)(\S+)/) {
+		die unless $submod;
+		my $l = $1;
+		my $u = $submod->{OrgUrl} = $2;
+		my $urv = "tree_${basewhich}_$submod->{OurName}";
+		if (length $r{$urv}) {
+		    $log1->("  overriding url=$u with runvar $urv=$r{$urv}");
+		    $u = $r{$urv};
+		} else {
+		    $log1->("  recording url=$u");
+		    store_runvar($urv, $u);
+		}
+		my $nu = $submod->{Url} = git_massage_url($u);
+		$_ = "${l}${nu}\n";
+	    }
+	    print ::EO or die $!;
+	}
+    });
+
+    target_cmd_build($ho,  60,"$builddir/$subdir","git submodule init");
+    target_cmd_build($ho,3600,"$builddir/$subdir","git submodule update");
+
+    foreach my $submod (@submodules) {
+	my $wantrev = $r{"revision_${basewhich}_$submod->{OurName}"};
+	if (length $wantrev) {
+	    target_cmd_build($ho,200,"$builddir/$subdir/$submod->{Path}",
+			     "git reset --hard $wantrev");
+	} else {
+	    store_revision($ho, "${basewhich}_$submod->{OurName}",
+			   "$builddir/$subdir/$submod->{Path}");
+	}
+    }
+
+    return \@submodules;
+}
+
 1;
diff --git a/Osstest/TestSupport.pm b/Osstest/TestSupport.pm
index 1492d9f..49bb175 100644
--- a/Osstest/TestSupport.pm
+++ b/Osstest/TestSupport.pm
@@ -1087,7 +1087,7 @@ sub dir_identify_vcs ($$) {
         set -e
         if ! test -e $dir; then echo none; exit 0; fi
         cd $dir
-        (test -d .git && echo git) ||
+        (test -e .git && echo git) ||
         (test -d .hg && echo hg) ||
         (echo >&2 'unable to determine vcs'; fail)
 END
-- 
1.7.10.4

  parent reply	other threads:[~2014-05-16 18:02 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-16 18:01 [OSSTEST PATCH 00/13] Test rump kernels Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 01/13] TestSupport: Provide target_editfile Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 02/13] git_massage_url: Make idempotent Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 03/13] BuildSupport, ts-*-build: Remove some clone-and-hack Ian Jackson
2014-05-16 18:01 ` Ian Jackson [this message]
2014-05-16 18:01 ` [OSSTEST PATCH 05/13] TestSupport: Break out target_jobdir Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 06/13] TestSupport: Break out target_extract_jobdistpath_subdir Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 07/13] target_jobdir: Create the directory Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 08/13] guest_umount_lv: Tolerate lack of volume group Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 09/13] prepareguest: Tolerate $mb=undef Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 10/13] mfi-common: Honour REVISION_LIBVIRT=disable Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 11/13] rump kernels: Provide a build job Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 12/13] rump kernels: Provide two test jobs Ian Jackson
2014-05-16 18:01 ` [OSSTEST PATCH 13/13] rump kernels: Create a "branch" for rump kernel tests Ian Jackson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1400263300-22903-5-git-send-email-ian.jackson@eu.citrix.com \
    --to=ian.jackson@eu.citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).