summaryrefslogtreecommitdiff
path: root/v4l
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2009-03-29 05:58:58 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-29 05:58:58 -0300
commit69357393e580dbcd400c7c1992b48813359eb417 (patch)
tree27c962a692da9c36cdaa85814eddf5f833ffd777 /v4l
parentc1320d2c77e66cf93a7b899cf3764a556c5bc3f9 (diff)
parentdd151ee816f6d89d08edda36da27880b88c32fae (diff)
downloadmediapointer-dvb-s2-69357393e580dbcd400c7c1992b48813359eb417.tar.gz
mediapointer-dvb-s2-69357393e580dbcd400c7c1992b48813359eb417.tar.bz2
merge: http://www.linuxtv.org/hg/~hverkuil/v4l-dvb-bttv
From: Mauro Carvalho Chehab <mchehab@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'v4l')
-rw-r--r--v4l/Makefile3
-rwxr-xr-xv4l/scripts/do_merge.pl175
2 files changed, 177 insertions, 1 deletions
diff --git a/v4l/Makefile b/v4l/Makefile
index 9d194178f..a5201f31b 100644
--- a/v4l/Makefile
+++ b/v4l/Makefile
@@ -240,7 +240,8 @@ ifneq ($(DIR),)
-e ' elsif (/^PATCHLEVEL\s*=\s*(\d+)/){ $$level=$$1; }' \
-e ' elsif (/^SUBLEVEL\s*=\s*(\d+)/){ $$sublevel=$$1; }' \
-e ' elsif (/^EXTRAVERSION\s*=\s*(\S+)\n/){ $$extra=$$1; }' \
- -e ' elsif (/^KERNELSRC\s*:=\s*(\S.*)\n/){ $$o=$$d; $$d=$$1; goto S; }' \
+ -e ' elsif (/^KERNELSRC\s*:=\s*(\S.*)\n/ || /^MAKEARGS\s*:=\s*-C\s*(\S.*)\n/)' \
+ -e ' { $$o=$$d; $$d=$$1; goto S; }' \
-e '};' \
-e 'printf ("VERSION=%s\nPATCHLEVEL:=%s\nSUBLEVEL:=%s\nKERNELRELEASE:=%s.%s.%s%s\n",' \
-e ' $$version,$$level,$$sublevel,$$version,$$level,$$sublevel,$$extra);' \
diff --git a/v4l/scripts/do_merge.pl b/v4l/scripts/do_merge.pl
new file mode 100755
index 000000000..0a4433a21
--- /dev/null
+++ b/v4l/scripts/do_merge.pl
@@ -0,0 +1,175 @@
+#!/usr/bin/perl
+
+my $merge_tree=shift or die "Should specify the pulled tree";
+
+sub hgrcuser($)
+{
+ my $file = shift;
+ my $ui = 0;
+ open IN, '<', $file;
+ while (<IN>) {
+ $ui = 1 if (/^\s*\[ui\]/);
+ if ($ui && /^\s*username\s*=\s*(\S.*?)\s*$/) {
+ close IN;
+ return($1);
+ }
+ }
+ close IN;
+ return("");
+}
+
+sub check_heads()
+{
+ my $count=0;
+ open IN, 'hg heads|';
+ while (<IN>) {
+ if (m/^[Cc]hangeset:/) {
+ $count++;
+ }
+ }
+ close IN;
+ return $count;
+}
+
+sub curr_changeset()
+{
+ my $changeset = -1;
+
+ open IN, 'hg heads|';
+ while (<IN>) {
+ if (m/^[Cc]hangeset:\s*(\d+)/) {
+ if ($changeset < 0) {
+ $changeset = $1;
+ } else {
+ if ($1 < $changeset) {
+ $changeset = $1;
+ }
+ }
+ }
+ }
+ close IN;
+ return $changeset;
+}
+
+sub check_status()
+{
+ my $count=0;
+ open IN, 'hg status -m -a -d -r|';
+ while (<IN>) {
+ $count++;
+ }
+ close IN;
+ return $count;
+}
+
+sub rollback()
+{
+ print "Rolling back hg pull $merge_tree\n";
+ system("hg rollback");
+ system("hg update -C");
+ exit -1;
+}
+
+####################
+# Determine username
+
+# Get Hg username from environment
+my $user = $ENV{HGUSER};
+
+# Didn't work? Try the repo's .hgrc file
+if ($user eq "") {
+ my $hgroot = `hg root`;
+ chomp($hgroot);
+ $user = hgrcuser("$hgroot/.hg/hgrc");
+}
+# Ok, try ~/.hgrc next
+if ($user eq "") {
+ $user = hgrcuser("$ENV{HOME}/.hgrc");
+}
+
+# Still no luck? Try some other environment variables
+if ($user eq "") {
+ my $name = $ENV{CHANGE_LOG_NAME};
+ my $email = $ENV{CHANGE_LOG_EMAIL_ADDRESS};
+ $user = "$name <$email>" if ($name ne "" || $email ne "");
+}
+
+# Last try to come up with something
+if ($user eq "") {
+ print "User not known. Can't procceed\n";
+ exit -1;
+}
+
+######################
+# Do some sanity tests
+
+print "Checking if everything is ok, before applying the new tree.\n";
+
+my $n_heads = check_heads();
+die "Your tree currently have more than one head (it has $n_heads heads). Can't procceed\n" if ($n_heads > 1);
+
+my $dirty = check_status();
+die "Your tree currently has changes. Can't procceed\n" if ($dirty);
+
+my $curr_cs = curr_changeset();
+
+###########
+# Pull tree
+
+print "hg pull $merge_tree\n";
+
+my $ret = system("hg pull $merge_tree");
+die "Couldn't pull from $merge_tree\n" if ($ret);
+
+#############################
+# Merge and commit, if needed
+
+$n_heads = check_heads();
+if ($n_heads > 2) {
+ print "The merged tree have more than one head (it has $n_heads heads). Can't procceed.\n";
+ rollback();
+}
+
+if ($n_heads == 2) {
+ print "Merging the new changesets\n";
+
+ $ret = system("hg merge");
+ if ($ret) {
+ print "hg merge failed. Can't procceed.\n";
+ rollback();
+ }
+
+ print "Committing the new tree\n";
+ # Write the commit message
+ $msg= "merge: $merge_tree\n\nFrom: $user\n\nSigned-off-by: $user\n";
+ $ret=system("hg commit -m '$msg'");
+ if ($ret) {
+ print "hg commit failed. Can't procceed.\n";
+ rollback();
+ }
+}
+
+#####################
+# Test resulting tree
+
+print "Testing if the build didn't break compilation. Only errors and warnings will be displayed. Please wait.\n";
+$ret = system ('make all|egrep -v "^\s*CC"|egrep -v "^\s*LD"');
+if ($ret) {
+ print "Build failed. Can't procceed.\n";
+
+ # To avoid the risk of doing something really bad, let's ask the user to run hg strip
+ print "Your tree is dirty. Since hg has only one rollback level, you'll need to use, instead:";
+ print "\thg strip $curr_cs; hg update -C";
+ print "You'll need to have hg mq extension enabled for hg strip to work.\n";
+
+ exit -1;
+}
+
+##############################
+# Everything is ok, let's push
+
+print "Pushing the new tree at the remote repository specified at .hg/hgrc\n";
+$ret=system ("hg push");
+if ($ret) {
+ print "hg push failed. Don't forget to do the push later.\n";
+}