/
svnpush.pl
executable file
·52 lines (43 loc) · 1.62 KB
1
2
3
4
5
6
#!/usr/bin/perl -w
use strict;
use warnings;
print("Making sure svn working copy is up to date...\n");
7
8
system("cd ../svn-mojoshader ; svn update");
my $svnver = `cd ../svn-mojoshader ; svnversion`;
9
chomp($svnver);
10
my $hgver = `cd ../svn-mojoshader ; svn log -r${svnver} |grep 'changeset:'`;
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
chomp($hgver);
$hgver =~ s/^changeset:\s+(\d+):.*\Z/$1/;
my $min = $hgver;
$hgver = `hg tip |grep 'changeset:'`;
chomp($hgver);
$hgver =~ s/^changeset:\s+(\d+):.*\Z/$1/;
my $max = $hgver;
if ($min == $max) {
print("We're already up to date. Exiting.\n");
exit 0;
}
$min++; # $min was the last committed revision, so we need to start one later.
print("first hg revision to commit to svn == '$min'\n");
print("last hg revision to commit to svn == '$max'\n");
my $i;
for ($i = $min; $i <= $max; $i++) {
my $p = $i - 1;
print("Revision #$i ...\n");
print("Getting log from Mercurial...\n");
system("hg log -v -r$i |grep -v '^tag: ' |tail -n +7 > commit.txt");
system("echo >> commit.txt");
system("echo 'This commit is from my temporary Mercurial repository...' >> commit.txt");
system("hg log -v -r$i |grep -v '^tag: ' |head -n 4 >> commit.txt");
print("Getting diff...\n");
system("hg diff -r${p}:${i} > patch.diff");
print("Patching svn working copy...\n");
42
system("cd ../svn-mojoshader ; patch -p1 < ../mojoshader/patch.diff");
43
print("Committing svn working copy...\n");
44
system("cd ../svn-mojoshader ; svn commit -F ../mojoshader/commit.txt");
45
46
47
48
49
50
51
print("Cleaning up...\n");
system("rm -rf commit.txt patch.diff");
print("...revision committed!\n");
}
print("svn push complete!\n\n");
exit 0;