vcs-mirror r2 - trunk



Author: johncarr
Date: Tue Jun 24 20:08:33 2008
New Revision: 2
URL: http://svn.gnome.org/viewvc/vcs-mirror?rev=2&view=rev

Log:
Initial checkin

Added:
   trunk/MAINTAINERS
   trunk/bzr-create.sh   (contents, props changed)
   trunk/bzr-update.sh   (contents, props changed)
   trunk/git-create.sh   (contents, props changed)
   trunk/git-update.sh   (contents, props changed)
   trunk/mirror.py   (contents, props changed)
   trunk/svn-create.sh   (contents, props changed)
   trunk/svn-update.sh   (contents, props changed)
Modified:
   trunk/   (props changed)

Added: trunk/MAINTAINERS
==============================================================================
--- (empty file)
+++ trunk/MAINTAINERS	Tue Jun 24 20:08:33 2008
@@ -0,0 +1,3 @@
+John Carr
+E-mail: john carr unrouted co uk
+Userid: johncarr

Added: trunk/bzr-create.sh
==============================================================================
--- (empty file)
+++ trunk/bzr-create.sh	Tue Jun 24 20:08:33 2008
@@ -0,0 +1,8 @@
+#!/bin/sh
+MODULE=$1
+
+cd /srv/bzr/
+bzr svn-import file:///srv/svn/$MODULE 
+
+# make trunk searchable
+bzr index $MODULE/trunk

Added: trunk/bzr-update.sh
==============================================================================
--- (empty file)
+++ trunk/bzr-update.sh	Tue Jun 24 20:08:33 2008
@@ -0,0 +1,3 @@
+#!/bin/sh
+echo $1
+bzr svn-import http://svn.gnome.org/svn/$1 /srv/bzr/$1

Added: trunk/git-create.sh
==============================================================================
--- (empty file)
+++ trunk/git-create.sh	Tue Jun 24 20:08:33 2008
@@ -0,0 +1,21 @@
+#!/bin/sh
+echo $1
+
+# Make a directory for our mirror
+mkdir -p /srv/git/$1
+cd /srv/git/$1
+
+# We want naked mirrors
+GIT_DIR=. ; export GIT_DIR
+
+# Create a new repo and pull in the GNOME module
+git init
+git svn init --stdlayout --rewrite-root svn+ssh://svn.gnome.org/svn/$1 file:///srv/svn/$1
+git svn fetch
+
+# The packing isn't very agressive right now, so repack it like hell
+git gc --prune --aggressive
+git repack -adf --window=100
+
+# Point master at svn/trunk
+git symbolic-ref refs/heads/master refs/remotes/trunk

Added: trunk/git-update.sh
==============================================================================
--- (empty file)
+++ trunk/git-update.sh	Tue Jun 24 20:08:33 2008
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+echo $1
+cd /srv/git/$1
+
+#
+# Pull the latest from svn.gnome.org
+#
+git --bare svn fetch
+
+#
+# Update .git/refs/{heads|tags}/svn/* from refs/remotes/*
+#
+SET_ECHO="set -x" # enable echo
+SET_ECHO="set +x" # disable echo
+
+# update all branches and tags
+git for-each-ref "--format=%(refname)" refs/remotes |
+  sed 's,/\([^/]*\)$, \1,' | while read trunk ref ; do
+  	case "$trunk" in
+	*/tags)	($SET_ECHO ; git update-ref refs/tags/svn/$ref  $trunk/$ref ) ;;
+	*)	($SET_ECHO ; git update-ref refs/heads/svn/$ref $trunk/$ref ) ;;
+	esac
+done
+
+# delete stale branches
+git for-each-ref "--format=%(refname)" refs/heads/svn |
+  sed 's,refs/heads/svn/,,' | while read ref ; do
+  	git rev-parse "refs/remotes/$ref" >/dev/null 2>&1 ||
+		($SET_ECHO ; git update-ref -d "refs/heads/svn/$ref" "refs/heads/svn/$ref" )
+done
+
+# delete stale tags
+git for-each-ref "--format=%(refname)" refs/tags/svn |
+  sed 's,refs/tags/svn/,,' | while read ref ; do
+  	git rev-parse "refs/remotes/tags/$ref" >/dev/null 2>&1 ||
+		($SET_ECHO ; git update-ref -d "refs/tags/svn/$ref" "refs/tags/svn/$ref" )
+done
+
+#
+# Allow dumb transports to work
+#
+exec git-update-server-info

Added: trunk/mirror.py
==============================================================================
--- (empty file)
+++ trunk/mirror.py	Tue Jun 24 20:08:33 2008
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+
+import sys, os, fcntl, signal
+from rfc822 import Message
+
+class MailHandler(object):
+    def __init__(self):
+        self.maildir = "/home/x469yq/Maildir"
+        self.new_dir = os.path.join(self.maildir, "new")
+        self.cur_dir = os.path.join(self.maildir, "cur")
+
+	self.queue = []
+
+        self.probe()
+
+    def connect(self):
+        fd = os.open(self.new_dir, os.O_RDONLY)
+        fcntl.fcntl(fd, fcntl.F_NOTIFY,fcntl.DN_CREATE)
+        signal.signal(signal.SIGIO, self.on_event)
+
+    def on_event(self, signum, frame):
+        self.probe()
+        self.connect()
+
+    def probe(self):
+        for f in os.listdir(self.new_dir):
+           path = os.path.join(self.new_dir, f)
+           new_path = os.path.join(self.cur_dir, f)
+           if os.path.isfile(path):
+               self.parse(path)
+               try:
+                   os.rename(path, new_path)
+               except:
+                   pass
+        self.empty_queue()
+
+    def parse(self, path):
+        f = open(path)
+        m = Message(f)
+        module = m.getheader("X-Topics")
+        if module:
+            if module not in self.queue:
+                self.queue.append(module)
+
+    def empty_queue(self):
+        for module in self.queue:
+	    for vcs in ("svn", "bzr", "git"):
+	        self.update(vcs, module)
+	self.queue = []
+
+    def update(self, vcs, module):
+        moddir = os.path.join("/srv", vcs, module)
+	if os.path.isdir(moddir):
+	    self.run("%s-update.sh" % vcs, module)
+	else:
+	    self.run("%s-create.sh" % vcs, module)
+
+    def run(self, command, module):
+        os.system("%s %s" % (os.path.join(os.path.expanduser("~"), command), module))
+
+if __name__ == "__main__":
+    x = MailHandler()
+    if "--once" not in sys.argv:
+        x.connect()
+        while True:
+            try:
+                signal.pause() # sleep until signal received
+            except KeyboardInterrupt:
+                sys.exit(0)
+

Added: trunk/svn-create.sh
==============================================================================
--- (empty file)
+++ trunk/svn-create.sh	Tue Jun 24 20:08:33 2008
@@ -0,0 +1,27 @@
+#!/bin/sh
+MODULE=$1
+UUID=$(svn info http://svn.gnome.org/svn/$MODULE | grep 'Repository UUID: ' | sed 's/Repository UUID\: //')
+
+echo $MODULE $UUID
+
+cd /srv/svn
+
+# Create a new repository
+svnadmin create $MODULE
+
+# Force UUID to match old repository
+cat - <<EOF | svnadmin load --force-uuid $MODULE
+SVN-fs-dump-format-version: 2
+
+UUID: $UUID
+EOF
+
+# svnsync hooks
+rm -rf $MODULE/hooks
+mkdir $MODULE/hooks
+echo '#!/bin/sh' > $MODULE/hooks/pre-revprop-change
+chmod +x $MODULE/hooks/pre-revprop-change
+
+# Set up svnsync
+svnsync init file:///srv/svn/$MODULE http://svn.gnome.org/svn/$MODULE
+svnsync sync file:///srv/svn/$MODULE

Added: trunk/svn-update.sh
==============================================================================
--- (empty file)
+++ trunk/svn-update.sh	Tue Jun 24 20:08:33 2008
@@ -0,0 +1,3 @@
+#!/bin/sh
+echo $1
+svnsync --non-interactive sync file:///srv/svn/$1



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