[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH OSSTEST v1] ap-fetch-version: Arrange for osstest merges from upstream to be stable



If a downstream osstest instance has nothing to test it its local
pretest then it will attempt to merge from the upstream instance. If
this fails then it will try again and again generating a new merge
commit each time, even if upstream has not moved.

It is desirable that these merges instead be stable i.e. the same if
the inputs have not changed. This is good for potential bisection
attempts, history reporting/mining as well as just being sensible.

Here we arrange for this by recording the last merge "epoch" (being
the first merge of the current input branches) in a new branch
"merge-epoch" in the local testing.git and comparing our fresh merge
against it.

If the tree and parents are the same then the merge is effectively
identical (it may/will differ in the date) and we reuse the epoch
merge.

If they new merge does not match then something has changed (i.e.
upstream has moved on) and so we take the new merge and establish a
new epoch.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---

I think this change might be best off applied initially to the
Cambridge instance pretest and once it passes testing there to be
folded into upstream via a PR.
---
 ap-fetch-version | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/ap-fetch-version b/ap-fetch-version
index ec52889..d8d4f97 100755
--- a/ap-fetch-version
+++ b/ap-fetch-version
@@ -134,6 +134,36 @@ osstest)
                    git merge \
                        -m "Automerge of $TREEBRANCH_OSSTEST_UPSTREAM into 
production" \
                        ap-merge >&2
+                   merge=$(git log -n1 --pretty='%T %P' HEAD)
+
+                   if git fetch $HOME/testing.git +merge-epoch:merge-epoch ; 
then
+                       # If the new merge matches the current epoch's
+                       # tree (%T) and parents (%P) then it is the
+                       # same in all the ways which matter. (It
+                       # likely only differs in the date). In which
+                       # case reuse the epoch merge so that repeated
+                       # flights and potential bisections over
+                       # osstest see something stable.
+                       #
+                       # If e.g the parents have changed
+                       # (e.g. upstream has progressed) or the trees
+                       # differ then use the new merge and establish
+                       # a new merge-epoch.
+                       epoch=$(git log -n1 --pretty='%T %P' merge-epoch)
+                   else
+                       echo >&2 "Failed to fetch merge-epoch"
+                       epoch="NONE"
+                   fi
+                   
+                   echo >&2 "Merge Epoch: $epoch"
+                   echo >&2 "This Merge:  $merge"
+                   if [ x"$epoch" = x"$merge" ] ; then
+                       echo >&2 "Reusing existing merge-epoch"
+                       git reset --hard merge-epoch
+                   else
+                       echo >&2 "New merge-epoch"
+                       git push $HOME/testing.git +production:merge-epoch
+                   fi
                )
 
                # Fetch the result of the above merge into local tree
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.