From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 16:48:29 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ABD3B1065674; Tue, 11 Aug 2009 16:48:29 +0000 (UTC) (envelope-from ken@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9B6078FC48; Tue, 11 Aug 2009 16:48:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BGmTZi036057; Tue, 11 Aug 2009 16:48:29 GMT (envelope-from ken@svn.freebsd.org) Received: (from ken@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BGmTEc036056; Tue, 11 Aug 2009 16:48:29 GMT (envelope-from ken@svn.freebsd.org) Message-Id: <200908111648.n7BGmTEc036056@svn.freebsd.org> From: "Kenneth D. Merry" Date: Tue, 11 Aug 2009 16:48:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196096 - svnadmin/conf X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 16:48:30 -0000 Author: ken Date: Tue Aug 11 16:48:28 2009 New Revision: 196096 URL: http://svn.freebsd.org/changeset/base/196096 Log: Add Will Andrews (will) back to the src committers list. He will be working on storage and network-related changes. I will be his mentor. Approved by: core Modified: svnadmin/conf/access Modified: svnadmin/conf/access ============================================================================== --- svnadmin/conf/access Tue Aug 11 08:19:15 2009 (r196095) +++ svnadmin/conf/access Tue Aug 11 16:48:28 2009 (r196096) @@ -223,6 +223,7 @@ versus weongyo wes wes@opensail.org wilko freebsd-commits@freebie.xs4all.nl +will wkoszek wollman wpaul From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 16:53:11 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6FF9A106566B; Tue, 11 Aug 2009 16:53:11 +0000 (UTC) (envelope-from ken@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4615E8FC43; Tue, 11 Aug 2009 16:53:11 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BGrBE7036268; Tue, 11 Aug 2009 16:53:11 GMT (envelope-from ken@svn.freebsd.org) Received: (from ken@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BGrBLa036266; Tue, 11 Aug 2009 16:53:11 GMT (envelope-from ken@svn.freebsd.org) Message-Id: <200908111653.n7BGrBLa036266@svn.freebsd.org> From: "Kenneth D. Merry" Date: Tue, 11 Aug 2009 16:53:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196097 - svnadmin/conf X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 16:53:11 -0000 Author: ken Date: Tue Aug 11 16:53:08 2009 New Revision: 196097 URL: http://svn.freebsd.org/changeset/base/196097 Log: Mention that I'm mentoring Will Andrews (will). Approved by: core Modified: svnadmin/conf/mentors Modified: svnadmin/conf/mentors ============================================================================== --- svnadmin/conf/mentors Tue Aug 11 16:48:28 2009 (r196096) +++ svnadmin/conf/mentors Tue Aug 11 16:53:08 2009 (r196097) @@ -27,5 +27,6 @@ sbruno scottl snb dwmalone sson gnn versus dds +will ken zec julian Co-mentor: silby zml dfr From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 21:18:41 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D9F24106564A; Tue, 11 Aug 2009 21:18:41 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C8A008FC42; Tue, 11 Aug 2009 21:18:41 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BLIfK9042025; Tue, 11 Aug 2009 21:18:41 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BLIfqV042023; Tue, 11 Aug 2009 21:18:41 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200908112118.n7BLIfqV042023@svn.freebsd.org> From: Peter Wemm Date: Tue, 11 Aug 2009 21:18:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196099 - svnadmin/tools X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 21:18:42 -0000 Author: peter Date: Tue Aug 11 21:18:41 2009 New Revision: 196099 URL: http://svn.freebsd.org/changeset/base/196099 Log: Checkpoint the hacks that have accumulated over time. Usually this is because of ill-advised things like changing properties (eg: keywords) and deleting the file in the same commit. The deprecated API that the exporter uses can't represent that. Modified: svnadmin/tools/export.py Modified: svnadmin/tools/export.py ============================================================================== --- svnadmin/tools/export.py Tue Aug 11 20:39:10 2009 (r196098) +++ svnadmin/tools/export.py Tue Aug 11 21:18:41 2009 (r196099) @@ -313,7 +313,16 @@ def exportrev(pool, fs_ptr, rev, cvspath failed = do_cvs(workpath, '', "cvs -Rq co %s src" % uptag) assert not failed # at this point, the top directory and /src should exist - #print p, path, k + print p, path, k + # hacks + #if p == 'head/contrib/file/FREEBSD-upgrade' and k == 'A': + # continue + #if p == 'head/contrib/file/magic2mime' and k == 'A': + # continue + #if p == 'head/lib/libc/stdio/asprintf.c' and k == 'D': + # continue + if p == 'head/tools/build/options/WITH_BIND_LIBS' and k == 'A' and rev == 193280: + continue makedirs(workpath, _dirname(path), 'src') # Now the directory for the files must exist, and branch tag will be sticky assert os.path.isdir(os.path.join(workpath, _dirname(path))) @@ -352,6 +361,7 @@ def export(pool, repos_path, cvspath): curr_rev = fs.youngest_rev(fs_ptr) last_rev = int(fs.revision_prop(fs_ptr, 0, 'fbsd:lastexp')) if last_rev < curr_rev: + time.sleep(5) print '%d %s' % (last_rev, curr_rev) rev = '%d' % (last_rev + 1) print '==========> export rev ' + rev From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 21:21:20 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5C0F21065677; Tue, 11 Aug 2009 21:21:20 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 493A78FC1F; Tue, 11 Aug 2009 21:21:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BLLK6N042142; Tue, 11 Aug 2009 21:21:20 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BLLK34042139; Tue, 11 Aug 2009 21:21:20 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200908112121.n7BLLK34042139@svn.freebsd.org> From: Peter Wemm Date: Tue, 11 Aug 2009 21:21:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196100 - svnadmin/tools X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 21:21:20 -0000 Author: peter Date: Tue Aug 11 21:21:20 2009 New Revision: 196100 URL: http://svn.freebsd.org/changeset/base/196100 Log: Clone export.py before splitting into two parts. Added: svnadmin/tools/export1.py - copied unchanged from r196099, svnadmin/tools/export.py svnadmin/tools/export2.py - copied unchanged from r196099, svnadmin/tools/export.py Copied: svnadmin/tools/export1.py (from r196099, svnadmin/tools/export.py) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ svnadmin/tools/export1.py Tue Aug 11 21:21:20 2009 (r196100, copy of r196099, svnadmin/tools/export.py) @@ -0,0 +1,381 @@ +#!/usr/local/bin/python + +# $FreeBSD$ + +import string +import sys +import time +import os +import popen2 +import tempfile +from svn import core, fs, delta, repos + +do_keywords = False + +# SVN's API structure is to do callbacks to a class to get notifications +class ChangeReceiver(delta.Editor): + def __init__(self, fs_root, base_root, rev, fs_ptr, pool, do_kw): + self.fs_root = fs_root + self.base_root = base_root + self.fs_ptr = fs_ptr + self.rev = int(rev) + self.pool = pool + self.do_kw = do_kw + self.changes = [] + + def delete_entry(self, path, revision, parent_baton, pool): + self.changes.append(['D', path]) + + def add_file(self, path, parent_baton, + copyfrom_path, copyfrom_revision, file_pool): + self.changes.append(['A', path]) + return [ '_', ' ', None ] + + def open_file(self, path, parent_baton, base_revision, file_pool): + return [ '_', ' ', path ] + + def apply_textdelta(self, file_baton, base_checksum): + text_mod, prop_mod, path = file_baton + file_baton[0] = 'U' + # no handler + return None + + def change_file_prop(self, file_baton, name, value, pool): + text_mod, prop_mod, path = file_baton + if self.do_kw and name == core.SVN_PROP_KEYWORDS: + file_baton[1] = 'U' + + def close_file(self, file_baton, text_checksum): + text_mod, prop_mod, path = file_baton + # test the path. it will be None if we added this file. + if path: + status = text_mod + prop_mod + # was there some kind of change? + if status != '_ ': + self.changes.append(['U', path]) + +# Last path component +def _basename(path): + idx = path.rfind('/') + if idx == -1: + return path + return path[idx+1:] + +# Directory component +def _dirname(path): + idx = path.rfind('/') + if idx == -1: + return '' + return path[:idx] + +# Keep track of best common prefix per directory group to keep commit time down +class pathcollector(): + def __init__(self): + self.paths = {} + + # Not really a set.. calculates common prefix instead. + def __setitem__(self, prefix, dir): + # If we haven't seen a dir, start here + if not self.paths.has_key(prefix): + self.paths[prefix] = dir + return + # If it is the same dir, we're finished + if self.paths[prefix] == dir: + return + # See if we've found a common parent + parent = dir + while _dirname(parent) != parent: + parent = _dirname(parent) + # See if common prefix works + if self.paths[prefix] == parent: + return + # Raise common prefix + if self.paths[prefix].startswith(parent): + self.paths[prefix] = parent + return + print "WTF?" + assert false + + def __iter__(self): + return self.paths.iteritems() + +# Issue a cvs command, aborting if a problem happens +def do_cvs(cvspath, dir, cmd): + ioerror = False + print("cvs path %s, dir %s, cmd %s" % (cvspath, dir, cmd)) + cwd = os.getcwd() + os.chdir(os.path.join(cvspath, dir)) + pipe = popen2.Popen3(cmd) + os.chdir(cwd) + output = '' + try: + output = pipe.fromchild.readlines() + pipe.fromchild.close() + pipe.tochild.close() + except IOError: + ioerror = True + rv = pipe.wait() + failed = (rv != 0) or ioerror + print 'Cvs output: ', output + return failed + +# Dump a file from svn into cvs. This has to apply the delta to the previous rev. +def dump_file(fs_ptr, fs_root, rev, svnpath, cvspath, author, date, pool, workpath): + if do_keywords: + kw = fs.node_prop(fs_root, svnpath, core.SVN_PROP_KEYWORDS) + if not kw: + kw = '' + str = '$' + 'FreeBSD: %s %s %s %s $' % (cvspath, rev, date, author) + #str = '$' + 'FreeBSDId: %s %s %s %s $' % (cvspath, rev, date, author) + + subpool = core.svn_pool_create(pool) + stream = core.Stream(fs.file_contents(fs_root, svnpath, subpool)) + str_list = [] + while 1: + data = stream.read(core.SVN_STREAM_CHUNK_SIZE) + str_list.append(data) + if len(data) < core.SVN_STREAM_CHUNK_SIZE: + break + string = ''.join(str_list) + # Expand keywords + if do_keywords: + if kw == r'FreeBSD=%H': + old = '$' + 'FreeBSD$' + string = string.replace(old, str) + cvsfile = os.path.join(workpath, cvspath) +# sys.stdout.write('File contents:\n=========\n') +# sys.stdout.write(string) +# sys.stdout.write('=========\n') + executable = fs.node_prop(fs_root, svnpath, core.SVN_PROP_EXECUTABLE) + if executable: + mode = 0777 + else: + mode = 0666 + outfile = os.open(cvsfile, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, mode) + if not outfile: + sys.exit('cannot open %s for write' % cvsfile) + n = os.write(outfile, string) + if n != len(string): + sys.exit('short write. %d instead of %d' % (n, len(string))) + os.close(outfile) + core.svn_pool_destroy(subpool) + +# List of paths we export to cvs, and what branch tag (or None for HEAD) +# Hard coded for now. This will be automatically implied based on path transforms. +maptable = [ + # -current head + ( 'head/', None ), + # -stable branches + ( 'stable/2.0.5/', 'RELENG_2_0_5' ), + ( 'stable/2.1/', 'RELENG_2_1_0' ), + ( 'stable/2.2/', 'RELENG_2_2' ), + ( 'stable/3/', 'RELENG_3' ), + ( 'stable/4/', 'RELENG_4' ), + ( 'stable/5/', 'RELENG_5' ), + ( 'stable/6/', 'RELENG_6' ), + ( 'stable/7/', 'RELENG_7' ), + # errata / security / releng branches + ( 'releng/ALPHA_2_0/','ALPHA_2_0' ), + ( 'releng/BETA_2_0/', 'BETA_2_0' ), + ( 'releng/4.3/', 'RELENG_4_3' ), + ( 'releng/4.4/', 'RELENG_4_4' ), + ( 'releng/4.5/', 'RELENG_4_5' ), + ( 'releng/4.6/', 'RELENG_4_6' ), + ( 'releng/4.7/', 'RELENG_4_7' ), + ( 'releng/4.8/', 'RELENG_4_8' ), + ( 'releng/4.9/', 'RELENG_4_9' ), + ( 'releng/4.10/', 'RELENG_4_10' ), + ( 'releng/4.11/', 'RELENG_4_11' ), + ( 'releng/4.12/', 'RELENG_4_12' ), + ( 'releng/5.0/', 'RELENG_5_0' ), + ( 'releng/5.1/', 'RELENG_5_1' ), + ( 'releng/5.2/', 'RELENG_5_2' ), + ( 'releng/5.3/', 'RELENG_5_3' ), + ( 'releng/5.4/', 'RELENG_5_4' ), + ( 'releng/5.5/', 'RELENG_5_5' ), + ( 'releng/5.6/', 'RELENG_5_6' ), + ( 'releng/6.0/', 'RELENG_6_0' ), + ( 'releng/6.1/', 'RELENG_6_1' ), + ( 'releng/6.2/', 'RELENG_6_2' ), + ( 'releng/6.3/', 'RELENG_6_3' ), + ( 'releng/6.4/', 'RELENG_6_4' ), + ( 'releng/7.0/', 'RELENG_7_0' ), + ( 'releng/7.1/', 'RELENG_7_1' ), + ( 'releng/7.2/', 'RELENG_7_2' ), +] + +def map2cvs(svnpath): + for prefix, branch in maptable: + plen = len(prefix) + if svnpath.startswith(prefix): + return 'src/' + svnpath[plen:], branch + return None, None + +# List of special remap cases. +roottable = [ + ( 'svnadmin/conf/access', 'CVSROOT/access', 'CVSROOT' ), + ( 'svnadmin/conf/mentors', 'CVSROOT/mentors', 'CVSROOT' ), +] + +def maproot(p): + for svnpath, path, dir in roottable: + if p == svnpath: + return path, dir + return None, None + +# Add intermediate directories to the cvs checkout area as needed. +# XXX should use 'cvs update -d -l' if the dir exists in cvsroot +def makedirs(cvspath, path, base): + #print 'Makedirs:', cvspath, path + if not path.startswith(base): + sys.exit('Illegal path %s' % path) + if path == base: + return + makedirs(cvspath, _dirname(path), base) + fullpath = os.path.join(cvspath, path) + if os.path.isfile(fullpath): + sys.exit('Dest dir is a file' % path) + if not os.path.isdir(fullpath): + try: + #print "Making directory " + fullpath + os.makedirs(fullpath) + failed = do_cvs(cvspath, _dirname(path), "cvs -q add %s" % _basename(path)) + assert not failed + except OSError: + sys.exit('Cannot mkdir %s' % path) + #print 'Dirpath complete: ' + path + +# Export a single change to cvs. +def exportrev(pool, fs_ptr, rev, cvspath): + def authz_cb(root, path, pool): + return True + + subpool = core.svn_pool_create(pool) + # Connect up to the revision + fs_root = fs.revision_root(fs_ptr, rev, subpool) + base_root = fs.revision_root(fs_ptr, rev - 1, subpool) + editor = ChangeReceiver(fs_root, base_root, rev, fs_ptr, subpool, do_keywords) + e_ptr, e_baton = delta.make_editor(editor, subpool) + repos.dir_delta(base_root, '', '', fs_root, '', e_ptr, e_baton, authz_cb, 0, 1, 0, 0, subpool) + + # Author + author = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_AUTHOR) + if not author: + author = 'NoAuthor' + if author == 'davidg': + author = 'dg' + os.environ['CVS_AUTHOR'] = author + print 'Author: ' + author + + # Date + date = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_DATE) + if date: + aprtime = core.svn_time_from_cstring(date) + secs = aprtime / 1000000 # aprtime is microseconds; make seconds + tm = time.gmtime(secs) + date = time.strftime('%Y-%m-%d %H:%M:%SZ', tm) + os.environ['CVS_TIMESTAMP'] = "%d" % secs + else: + date = 'NoDate' + if os.environ.has_key('CVS_TIMESTAMP'): + del os.environ['CVS_TIMESTAMP'] + + # Build log message to export + cvslog = 'SVN rev %d on %s by %s\n' % (rev, date, author) + svnlog = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_LOG) + if svnlog: + cvslog += '\n' + svnlog + + pc = pathcollector() + + for k, p in editor.changes: + #print 'Path ', p + # Hack, hack + (path, dir) = maproot(p) + if path: + workpath = cvspath + dump_file(fs_ptr, fs_root, rev, p, path, author, date, subpool, workpath) + pc[workpath] = dir + continue + (path, tag) = map2cvs(p) + if not path: + continue + if tag: + workpath = os.path.join(cvspath, tag) + uptag = '-r ' + tag + else: + workpath = cvspath + uptag = '-A' + #print workpath + if not os.path.isdir(workpath): + os.makedirs(workpath) + if not os.path.isdir(os.path.join(workpath, 'src')): + failed = do_cvs(workpath, '', "cvs -Rq co %s src" % uptag) + assert not failed + # at this point, the top directory and /src should exist + print p, path, k + # hacks + #if p == 'head/contrib/file/FREEBSD-upgrade' and k == 'A': + # continue + #if p == 'head/contrib/file/magic2mime' and k == 'A': + # continue + #if p == 'head/lib/libc/stdio/asprintf.c' and k == 'D': + # continue + if p == 'head/tools/build/options/WITH_BIND_LIBS' and k == 'A' and rev == 193280: + continue + makedirs(workpath, _dirname(path), 'src') + # Now the directory for the files must exist, and branch tag will be sticky + assert os.path.isdir(os.path.join(workpath, _dirname(path))) + assert k == 'A' or k == 'U' or k == 'D' + + if k == 'A' or k == 'U': + print 'add/update file ' + path + '.' + destpath = os.path.join(workpath, path) + existed = os.path.isfile(destpath) + dump_file(fs_ptr, fs_root, rev, p, path, author, date, subpool, workpath) + if not existed: + print 'cvs add file ' + path + '.' + failed = do_cvs(workpath, _dirname(path), "cvs -q add %s" % _basename(path)) + assert not failed + elif k == 'D': + print 'cvs rm -f file ' + path + '.' + failed = do_cvs(workpath, _dirname(path), "cvs -q rm -f %s" % _basename(path)) + assert not failed + pc[workpath] = _dirname(path) + + # aggregate the commit + for root, dir in pc: + fd, logfile = tempfile.mkstemp() + os.write(fd, cvslog) + os.close(fd) + failed = do_cvs(root, dir, "cvs -q commit -F %s" % logfile) + assert not failed + os.remove(logfile) + core.svn_pool_destroy(subpool) + +# Loop for the export range +def export(pool, repos_path, cvspath): + repos_path = core.svn_path_canonicalize(repos_path) + fs_ptr = repos.fs(repos.open(repos_path, pool)) + while True: + curr_rev = fs.youngest_rev(fs_ptr) + last_rev = int(fs.revision_prop(fs_ptr, 0, 'fbsd:lastexp')) + if last_rev < curr_rev: + time.sleep(5) + print '%d %s' % (last_rev, curr_rev) + rev = '%d' % (last_rev + 1) + print '==========> export rev ' + rev + exportrev(pool, fs_ptr, last_rev + 1, cvspath) + fs.change_rev_prop(fs_ptr, 0, 'fbsd:lastexp', rev) + continue + print "." + time.sleep(15) + + +if __name__ == '__main__': + print "Version: $FreeBSD$" + os.environ['CVSROOT'] = '/r/ncvs' + core.run_app(export, '/r/svnmirror/base', '/r/svn2cvs/cvs') + # test rig + #os.environ['CVSROOT'] = '/home/peter/exp/cvs' + #core.run_app(export, '/home/peter/exp/svn', '/home/peter/exp/co') Copied: svnadmin/tools/export2.py (from r196099, svnadmin/tools/export.py) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ svnadmin/tools/export2.py Tue Aug 11 21:21:20 2009 (r196100, copy of r196099, svnadmin/tools/export.py) @@ -0,0 +1,381 @@ +#!/usr/local/bin/python + +# $FreeBSD$ + +import string +import sys +import time +import os +import popen2 +import tempfile +from svn import core, fs, delta, repos + +do_keywords = False + +# SVN's API structure is to do callbacks to a class to get notifications +class ChangeReceiver(delta.Editor): + def __init__(self, fs_root, base_root, rev, fs_ptr, pool, do_kw): + self.fs_root = fs_root + self.base_root = base_root + self.fs_ptr = fs_ptr + self.rev = int(rev) + self.pool = pool + self.do_kw = do_kw + self.changes = [] + + def delete_entry(self, path, revision, parent_baton, pool): + self.changes.append(['D', path]) + + def add_file(self, path, parent_baton, + copyfrom_path, copyfrom_revision, file_pool): + self.changes.append(['A', path]) + return [ '_', ' ', None ] + + def open_file(self, path, parent_baton, base_revision, file_pool): + return [ '_', ' ', path ] + + def apply_textdelta(self, file_baton, base_checksum): + text_mod, prop_mod, path = file_baton + file_baton[0] = 'U' + # no handler + return None + + def change_file_prop(self, file_baton, name, value, pool): + text_mod, prop_mod, path = file_baton + if self.do_kw and name == core.SVN_PROP_KEYWORDS: + file_baton[1] = 'U' + + def close_file(self, file_baton, text_checksum): + text_mod, prop_mod, path = file_baton + # test the path. it will be None if we added this file. + if path: + status = text_mod + prop_mod + # was there some kind of change? + if status != '_ ': + self.changes.append(['U', path]) + +# Last path component +def _basename(path): + idx = path.rfind('/') + if idx == -1: + return path + return path[idx+1:] + +# Directory component +def _dirname(path): + idx = path.rfind('/') + if idx == -1: + return '' + return path[:idx] + +# Keep track of best common prefix per directory group to keep commit time down +class pathcollector(): + def __init__(self): + self.paths = {} + + # Not really a set.. calculates common prefix instead. + def __setitem__(self, prefix, dir): + # If we haven't seen a dir, start here + if not self.paths.has_key(prefix): + self.paths[prefix] = dir + return + # If it is the same dir, we're finished + if self.paths[prefix] == dir: + return + # See if we've found a common parent + parent = dir + while _dirname(parent) != parent: + parent = _dirname(parent) + # See if common prefix works + if self.paths[prefix] == parent: + return + # Raise common prefix + if self.paths[prefix].startswith(parent): + self.paths[prefix] = parent + return + print "WTF?" + assert false + + def __iter__(self): + return self.paths.iteritems() + +# Issue a cvs command, aborting if a problem happens +def do_cvs(cvspath, dir, cmd): + ioerror = False + print("cvs path %s, dir %s, cmd %s" % (cvspath, dir, cmd)) + cwd = os.getcwd() + os.chdir(os.path.join(cvspath, dir)) + pipe = popen2.Popen3(cmd) + os.chdir(cwd) + output = '' + try: + output = pipe.fromchild.readlines() + pipe.fromchild.close() + pipe.tochild.close() + except IOError: + ioerror = True + rv = pipe.wait() + failed = (rv != 0) or ioerror + print 'Cvs output: ', output + return failed + +# Dump a file from svn into cvs. This has to apply the delta to the previous rev. +def dump_file(fs_ptr, fs_root, rev, svnpath, cvspath, author, date, pool, workpath): + if do_keywords: + kw = fs.node_prop(fs_root, svnpath, core.SVN_PROP_KEYWORDS) + if not kw: + kw = '' + str = '$' + 'FreeBSD: %s %s %s %s $' % (cvspath, rev, date, author) + #str = '$' + 'FreeBSDId: %s %s %s %s $' % (cvspath, rev, date, author) + + subpool = core.svn_pool_create(pool) + stream = core.Stream(fs.file_contents(fs_root, svnpath, subpool)) + str_list = [] + while 1: + data = stream.read(core.SVN_STREAM_CHUNK_SIZE) + str_list.append(data) + if len(data) < core.SVN_STREAM_CHUNK_SIZE: + break + string = ''.join(str_list) + # Expand keywords + if do_keywords: + if kw == r'FreeBSD=%H': + old = '$' + 'FreeBSD$' + string = string.replace(old, str) + cvsfile = os.path.join(workpath, cvspath) +# sys.stdout.write('File contents:\n=========\n') +# sys.stdout.write(string) +# sys.stdout.write('=========\n') + executable = fs.node_prop(fs_root, svnpath, core.SVN_PROP_EXECUTABLE) + if executable: + mode = 0777 + else: + mode = 0666 + outfile = os.open(cvsfile, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, mode) + if not outfile: + sys.exit('cannot open %s for write' % cvsfile) + n = os.write(outfile, string) + if n != len(string): + sys.exit('short write. %d instead of %d' % (n, len(string))) + os.close(outfile) + core.svn_pool_destroy(subpool) + +# List of paths we export to cvs, and what branch tag (or None for HEAD) +# Hard coded for now. This will be automatically implied based on path transforms. +maptable = [ + # -current head + ( 'head/', None ), + # -stable branches + ( 'stable/2.0.5/', 'RELENG_2_0_5' ), + ( 'stable/2.1/', 'RELENG_2_1_0' ), + ( 'stable/2.2/', 'RELENG_2_2' ), + ( 'stable/3/', 'RELENG_3' ), + ( 'stable/4/', 'RELENG_4' ), + ( 'stable/5/', 'RELENG_5' ), + ( 'stable/6/', 'RELENG_6' ), + ( 'stable/7/', 'RELENG_7' ), + # errata / security / releng branches + ( 'releng/ALPHA_2_0/','ALPHA_2_0' ), + ( 'releng/BETA_2_0/', 'BETA_2_0' ), + ( 'releng/4.3/', 'RELENG_4_3' ), + ( 'releng/4.4/', 'RELENG_4_4' ), + ( 'releng/4.5/', 'RELENG_4_5' ), + ( 'releng/4.6/', 'RELENG_4_6' ), + ( 'releng/4.7/', 'RELENG_4_7' ), + ( 'releng/4.8/', 'RELENG_4_8' ), + ( 'releng/4.9/', 'RELENG_4_9' ), + ( 'releng/4.10/', 'RELENG_4_10' ), + ( 'releng/4.11/', 'RELENG_4_11' ), + ( 'releng/4.12/', 'RELENG_4_12' ), + ( 'releng/5.0/', 'RELENG_5_0' ), + ( 'releng/5.1/', 'RELENG_5_1' ), + ( 'releng/5.2/', 'RELENG_5_2' ), + ( 'releng/5.3/', 'RELENG_5_3' ), + ( 'releng/5.4/', 'RELENG_5_4' ), + ( 'releng/5.5/', 'RELENG_5_5' ), + ( 'releng/5.6/', 'RELENG_5_6' ), + ( 'releng/6.0/', 'RELENG_6_0' ), + ( 'releng/6.1/', 'RELENG_6_1' ), + ( 'releng/6.2/', 'RELENG_6_2' ), + ( 'releng/6.3/', 'RELENG_6_3' ), + ( 'releng/6.4/', 'RELENG_6_4' ), + ( 'releng/7.0/', 'RELENG_7_0' ), + ( 'releng/7.1/', 'RELENG_7_1' ), + ( 'releng/7.2/', 'RELENG_7_2' ), +] + +def map2cvs(svnpath): + for prefix, branch in maptable: + plen = len(prefix) + if svnpath.startswith(prefix): + return 'src/' + svnpath[plen:], branch + return None, None + +# List of special remap cases. +roottable = [ + ( 'svnadmin/conf/access', 'CVSROOT/access', 'CVSROOT' ), + ( 'svnadmin/conf/mentors', 'CVSROOT/mentors', 'CVSROOT' ), +] + +def maproot(p): + for svnpath, path, dir in roottable: + if p == svnpath: + return path, dir + return None, None + +# Add intermediate directories to the cvs checkout area as needed. +# XXX should use 'cvs update -d -l' if the dir exists in cvsroot +def makedirs(cvspath, path, base): + #print 'Makedirs:', cvspath, path + if not path.startswith(base): + sys.exit('Illegal path %s' % path) + if path == base: + return + makedirs(cvspath, _dirname(path), base) + fullpath = os.path.join(cvspath, path) + if os.path.isfile(fullpath): + sys.exit('Dest dir is a file' % path) + if not os.path.isdir(fullpath): + try: + #print "Making directory " + fullpath + os.makedirs(fullpath) + failed = do_cvs(cvspath, _dirname(path), "cvs -q add %s" % _basename(path)) + assert not failed + except OSError: + sys.exit('Cannot mkdir %s' % path) + #print 'Dirpath complete: ' + path + +# Export a single change to cvs. +def exportrev(pool, fs_ptr, rev, cvspath): + def authz_cb(root, path, pool): + return True + + subpool = core.svn_pool_create(pool) + # Connect up to the revision + fs_root = fs.revision_root(fs_ptr, rev, subpool) + base_root = fs.revision_root(fs_ptr, rev - 1, subpool) + editor = ChangeReceiver(fs_root, base_root, rev, fs_ptr, subpool, do_keywords) + e_ptr, e_baton = delta.make_editor(editor, subpool) + repos.dir_delta(base_root, '', '', fs_root, '', e_ptr, e_baton, authz_cb, 0, 1, 0, 0, subpool) + + # Author + author = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_AUTHOR) + if not author: + author = 'NoAuthor' + if author == 'davidg': + author = 'dg' + os.environ['CVS_AUTHOR'] = author + print 'Author: ' + author + + # Date + date = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_DATE) + if date: + aprtime = core.svn_time_from_cstring(date) + secs = aprtime / 1000000 # aprtime is microseconds; make seconds + tm = time.gmtime(secs) + date = time.strftime('%Y-%m-%d %H:%M:%SZ', tm) + os.environ['CVS_TIMESTAMP'] = "%d" % secs + else: + date = 'NoDate' + if os.environ.has_key('CVS_TIMESTAMP'): + del os.environ['CVS_TIMESTAMP'] + + # Build log message to export + cvslog = 'SVN rev %d on %s by %s\n' % (rev, date, author) + svnlog = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_LOG) + if svnlog: + cvslog += '\n' + svnlog + + pc = pathcollector() + + for k, p in editor.changes: + #print 'Path ', p + # Hack, hack + (path, dir) = maproot(p) + if path: + workpath = cvspath + dump_file(fs_ptr, fs_root, rev, p, path, author, date, subpool, workpath) + pc[workpath] = dir + continue + (path, tag) = map2cvs(p) + if not path: + continue + if tag: + workpath = os.path.join(cvspath, tag) + uptag = '-r ' + tag + else: + workpath = cvspath + uptag = '-A' + #print workpath + if not os.path.isdir(workpath): + os.makedirs(workpath) + if not os.path.isdir(os.path.join(workpath, 'src')): + failed = do_cvs(workpath, '', "cvs -Rq co %s src" % uptag) + assert not failed + # at this point, the top directory and /src should exist + print p, path, k + # hacks + #if p == 'head/contrib/file/FREEBSD-upgrade' and k == 'A': + # continue + #if p == 'head/contrib/file/magic2mime' and k == 'A': + # continue + #if p == 'head/lib/libc/stdio/asprintf.c' and k == 'D': + # continue + if p == 'head/tools/build/options/WITH_BIND_LIBS' and k == 'A' and rev == 193280: + continue + makedirs(workpath, _dirname(path), 'src') + # Now the directory for the files must exist, and branch tag will be sticky + assert os.path.isdir(os.path.join(workpath, _dirname(path))) + assert k == 'A' or k == 'U' or k == 'D' + + if k == 'A' or k == 'U': + print 'add/update file ' + path + '.' + destpath = os.path.join(workpath, path) + existed = os.path.isfile(destpath) + dump_file(fs_ptr, fs_root, rev, p, path, author, date, subpool, workpath) + if not existed: + print 'cvs add file ' + path + '.' + failed = do_cvs(workpath, _dirname(path), "cvs -q add %s" % _basename(path)) + assert not failed + elif k == 'D': + print 'cvs rm -f file ' + path + '.' + failed = do_cvs(workpath, _dirname(path), "cvs -q rm -f %s" % _basename(path)) + assert not failed + pc[workpath] = _dirname(path) + + # aggregate the commit + for root, dir in pc: + fd, logfile = tempfile.mkstemp() + os.write(fd, cvslog) + os.close(fd) + failed = do_cvs(root, dir, "cvs -q commit -F %s" % logfile) + assert not failed + os.remove(logfile) + core.svn_pool_destroy(subpool) + +# Loop for the export range +def export(pool, repos_path, cvspath): + repos_path = core.svn_path_canonicalize(repos_path) + fs_ptr = repos.fs(repos.open(repos_path, pool)) + while True: + curr_rev = fs.youngest_rev(fs_ptr) + last_rev = int(fs.revision_prop(fs_ptr, 0, 'fbsd:lastexp')) + if last_rev < curr_rev: + time.sleep(5) + print '%d %s' % (last_rev, curr_rev) + rev = '%d' % (last_rev + 1) + print '==========> export rev ' + rev + exportrev(pool, fs_ptr, last_rev + 1, cvspath) + fs.change_rev_prop(fs_ptr, 0, 'fbsd:lastexp', rev) + continue + print "." + time.sleep(15) + + +if __name__ == '__main__': + print "Version: $FreeBSD$" + os.environ['CVSROOT'] = '/r/ncvs' + core.run_app(export, '/r/svnmirror/base', '/r/svn2cvs/cvs') + # test rig + #os.environ['CVSROOT'] = '/home/peter/exp/cvs' + #core.run_app(export, '/home/peter/exp/svn', '/home/peter/exp/co') From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 21:23:31 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 74C1E106566B; Tue, 11 Aug 2009 21:23:31 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 61E2C8FC1F; Tue, 11 Aug 2009 21:23:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BLNVNZ042233; Tue, 11 Aug 2009 21:23:31 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BLNVhj042230; Tue, 11 Aug 2009 21:23:31 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200908112123.n7BLNVhj042230@svn.freebsd.org> From: Peter Wemm Date: Tue, 11 Aug 2009 21:23:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196101 - svnadmin/tools X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 21:23:32 -0000 Author: peter Date: Tue Aug 11 21:23:31 2009 New Revision: 196101 URL: http://svn.freebsd.org/changeset/base/196101 Log: WIP: split exporter into two halves, persistent driver that tracks the repository, and a backend that exports a single rev. Modified: svnadmin/tools/export1.py svnadmin/tools/export2.py Modified: svnadmin/tools/export1.py ============================================================================== --- svnadmin/tools/export1.py Tue Aug 11 21:21:20 2009 (r196100) +++ svnadmin/tools/export1.py Tue Aug 11 21:23:31 2009 (r196101) @@ -10,103 +10,10 @@ import popen2 import tempfile from svn import core, fs, delta, repos -do_keywords = False - -# SVN's API structure is to do callbacks to a class to get notifications -class ChangeReceiver(delta.Editor): - def __init__(self, fs_root, base_root, rev, fs_ptr, pool, do_kw): - self.fs_root = fs_root - self.base_root = base_root - self.fs_ptr = fs_ptr - self.rev = int(rev) - self.pool = pool - self.do_kw = do_kw - self.changes = [] - - def delete_entry(self, path, revision, parent_baton, pool): - self.changes.append(['D', path]) - - def add_file(self, path, parent_baton, - copyfrom_path, copyfrom_revision, file_pool): - self.changes.append(['A', path]) - return [ '_', ' ', None ] - - def open_file(self, path, parent_baton, base_revision, file_pool): - return [ '_', ' ', path ] - - def apply_textdelta(self, file_baton, base_checksum): - text_mod, prop_mod, path = file_baton - file_baton[0] = 'U' - # no handler - return None - - def change_file_prop(self, file_baton, name, value, pool): - text_mod, prop_mod, path = file_baton - if self.do_kw and name == core.SVN_PROP_KEYWORDS: - file_baton[1] = 'U' - - def close_file(self, file_baton, text_checksum): - text_mod, prop_mod, path = file_baton - # test the path. it will be None if we added this file. - if path: - status = text_mod + prop_mod - # was there some kind of change? - if status != '_ ': - self.changes.append(['U', path]) - -# Last path component -def _basename(path): - idx = path.rfind('/') - if idx == -1: - return path - return path[idx+1:] - -# Directory component -def _dirname(path): - idx = path.rfind('/') - if idx == -1: - return '' - return path[:idx] - -# Keep track of best common prefix per directory group to keep commit time down -class pathcollector(): - def __init__(self): - self.paths = {} - - # Not really a set.. calculates common prefix instead. - def __setitem__(self, prefix, dir): - # If we haven't seen a dir, start here - if not self.paths.has_key(prefix): - self.paths[prefix] = dir - return - # If it is the same dir, we're finished - if self.paths[prefix] == dir: - return - # See if we've found a common parent - parent = dir - while _dirname(parent) != parent: - parent = _dirname(parent) - # See if common prefix works - if self.paths[prefix] == parent: - return - # Raise common prefix - if self.paths[prefix].startswith(parent): - self.paths[prefix] = parent - return - print "WTF?" - assert false - - def __iter__(self): - return self.paths.iteritems() - -# Issue a cvs command, aborting if a problem happens -def do_cvs(cvspath, dir, cmd): +# Issue an export command, aborting if a problem happens +def do_export(cmd): ioerror = False - print("cvs path %s, dir %s, cmd %s" % (cvspath, dir, cmd)) - cwd = os.getcwd() - os.chdir(os.path.join(cvspath, dir)) pipe = popen2.Popen3(cmd) - os.chdir(cwd) output = '' try: output = pipe.fromchild.readlines() @@ -116,256 +23,24 @@ def do_cvs(cvspath, dir, cmd): ioerror = True rv = pipe.wait() failed = (rv != 0) or ioerror - print 'Cvs output: ', output + print 'export2 output: ', output return failed # Dump a file from svn into cvs. This has to apply the delta to the previous rev. -def dump_file(fs_ptr, fs_root, rev, svnpath, cvspath, author, date, pool, workpath): - if do_keywords: - kw = fs.node_prop(fs_root, svnpath, core.SVN_PROP_KEYWORDS) - if not kw: - kw = '' - str = '$' + 'FreeBSD: %s %s %s %s $' % (cvspath, rev, date, author) - #str = '$' + 'FreeBSDId: %s %s %s %s $' % (cvspath, rev, date, author) - - subpool = core.svn_pool_create(pool) - stream = core.Stream(fs.file_contents(fs_root, svnpath, subpool)) - str_list = [] - while 1: - data = stream.read(core.SVN_STREAM_CHUNK_SIZE) - str_list.append(data) - if len(data) < core.SVN_STREAM_CHUNK_SIZE: - break - string = ''.join(str_list) - # Expand keywords - if do_keywords: - if kw == r'FreeBSD=%H': - old = '$' + 'FreeBSD$' - string = string.replace(old, str) - cvsfile = os.path.join(workpath, cvspath) -# sys.stdout.write('File contents:\n=========\n') -# sys.stdout.write(string) -# sys.stdout.write('=========\n') - executable = fs.node_prop(fs_root, svnpath, core.SVN_PROP_EXECUTABLE) - if executable: - mode = 0777 - else: - mode = 0666 - outfile = os.open(cvsfile, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, mode) - if not outfile: - sys.exit('cannot open %s for write' % cvsfile) - n = os.write(outfile, string) - if n != len(string): - sys.exit('short write. %d instead of %d' % (n, len(string))) - os.close(outfile) - core.svn_pool_destroy(subpool) - -# List of paths we export to cvs, and what branch tag (or None for HEAD) -# Hard coded for now. This will be automatically implied based on path transforms. -maptable = [ - # -current head - ( 'head/', None ), - # -stable branches - ( 'stable/2.0.5/', 'RELENG_2_0_5' ), - ( 'stable/2.1/', 'RELENG_2_1_0' ), - ( 'stable/2.2/', 'RELENG_2_2' ), - ( 'stable/3/', 'RELENG_3' ), - ( 'stable/4/', 'RELENG_4' ), - ( 'stable/5/', 'RELENG_5' ), - ( 'stable/6/', 'RELENG_6' ), - ( 'stable/7/', 'RELENG_7' ), - # errata / security / releng branches - ( 'releng/ALPHA_2_0/','ALPHA_2_0' ), - ( 'releng/BETA_2_0/', 'BETA_2_0' ), - ( 'releng/4.3/', 'RELENG_4_3' ), - ( 'releng/4.4/', 'RELENG_4_4' ), - ( 'releng/4.5/', 'RELENG_4_5' ), - ( 'releng/4.6/', 'RELENG_4_6' ), - ( 'releng/4.7/', 'RELENG_4_7' ), - ( 'releng/4.8/', 'RELENG_4_8' ), - ( 'releng/4.9/', 'RELENG_4_9' ), - ( 'releng/4.10/', 'RELENG_4_10' ), - ( 'releng/4.11/', 'RELENG_4_11' ), - ( 'releng/4.12/', 'RELENG_4_12' ), - ( 'releng/5.0/', 'RELENG_5_0' ), - ( 'releng/5.1/', 'RELENG_5_1' ), - ( 'releng/5.2/', 'RELENG_5_2' ), - ( 'releng/5.3/', 'RELENG_5_3' ), - ( 'releng/5.4/', 'RELENG_5_4' ), - ( 'releng/5.5/', 'RELENG_5_5' ), - ( 'releng/5.6/', 'RELENG_5_6' ), - ( 'releng/6.0/', 'RELENG_6_0' ), - ( 'releng/6.1/', 'RELENG_6_1' ), - ( 'releng/6.2/', 'RELENG_6_2' ), - ( 'releng/6.3/', 'RELENG_6_3' ), - ( 'releng/6.4/', 'RELENG_6_4' ), - ( 'releng/7.0/', 'RELENG_7_0' ), - ( 'releng/7.1/', 'RELENG_7_1' ), - ( 'releng/7.2/', 'RELENG_7_2' ), -] - -def map2cvs(svnpath): - for prefix, branch in maptable: - plen = len(prefix) - if svnpath.startswith(prefix): - return 'src/' + svnpath[plen:], branch - return None, None - -# List of special remap cases. -roottable = [ - ( 'svnadmin/conf/access', 'CVSROOT/access', 'CVSROOT' ), - ( 'svnadmin/conf/mentors', 'CVSROOT/mentors', 'CVSROOT' ), -] - -def maproot(p): - for svnpath, path, dir in roottable: - if p == svnpath: - return path, dir - return None, None - -# Add intermediate directories to the cvs checkout area as needed. -# XXX should use 'cvs update -d -l' if the dir exists in cvsroot -def makedirs(cvspath, path, base): - #print 'Makedirs:', cvspath, path - if not path.startswith(base): - sys.exit('Illegal path %s' % path) - if path == base: - return - makedirs(cvspath, _dirname(path), base) - fullpath = os.path.join(cvspath, path) - if os.path.isfile(fullpath): - sys.exit('Dest dir is a file' % path) - if not os.path.isdir(fullpath): - try: - #print "Making directory " + fullpath - os.makedirs(fullpath) - failed = do_cvs(cvspath, _dirname(path), "cvs -q add %s" % _basename(path)) - assert not failed - except OSError: - sys.exit('Cannot mkdir %s' % path) - #print 'Dirpath complete: ' + path - -# Export a single change to cvs. -def exportrev(pool, fs_ptr, rev, cvspath): - def authz_cb(root, path, pool): - return True - - subpool = core.svn_pool_create(pool) - # Connect up to the revision - fs_root = fs.revision_root(fs_ptr, rev, subpool) - base_root = fs.revision_root(fs_ptr, rev - 1, subpool) - editor = ChangeReceiver(fs_root, base_root, rev, fs_ptr, subpool, do_keywords) - e_ptr, e_baton = delta.make_editor(editor, subpool) - repos.dir_delta(base_root, '', '', fs_root, '', e_ptr, e_baton, authz_cb, 0, 1, 0, 0, subpool) - - # Author - author = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_AUTHOR) - if not author: - author = 'NoAuthor' - if author == 'davidg': - author = 'dg' - os.environ['CVS_AUTHOR'] = author - print 'Author: ' + author - - # Date - date = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_DATE) - if date: - aprtime = core.svn_time_from_cstring(date) - secs = aprtime / 1000000 # aprtime is microseconds; make seconds - tm = time.gmtime(secs) - date = time.strftime('%Y-%m-%d %H:%M:%SZ', tm) - os.environ['CVS_TIMESTAMP'] = "%d" % secs - else: - date = 'NoDate' - if os.environ.has_key('CVS_TIMESTAMP'): - del os.environ['CVS_TIMESTAMP'] - - # Build log message to export - cvslog = 'SVN rev %d on %s by %s\n' % (rev, date, author) - svnlog = fs.revision_prop(fs_ptr, rev, core.SVN_PROP_REVISION_LOG) - if svnlog: - cvslog += '\n' + svnlog - - pc = pathcollector() - - for k, p in editor.changes: - #print 'Path ', p - # Hack, hack - (path, dir) = maproot(p) - if path: - workpath = cvspath - dump_file(fs_ptr, fs_root, rev, p, path, author, date, subpool, workpath) - pc[workpath] = dir - continue - (path, tag) = map2cvs(p) - if not path: - continue - if tag: - workpath = os.path.join(cvspath, tag) - uptag = '-r ' + tag - else: - workpath = cvspath - uptag = '-A' - #print workpath - if not os.path.isdir(workpath): - os.makedirs(workpath) - if not os.path.isdir(os.path.join(workpath, 'src')): - failed = do_cvs(workpath, '', "cvs -Rq co %s src" % uptag) - assert not failed - # at this point, the top directory and /src should exist - print p, path, k - # hacks - #if p == 'head/contrib/file/FREEBSD-upgrade' and k == 'A': - # continue - #if p == 'head/contrib/file/magic2mime' and k == 'A': - # continue - #if p == 'head/lib/libc/stdio/asprintf.c' and k == 'D': - # continue - if p == 'head/tools/build/options/WITH_BIND_LIBS' and k == 'A' and rev == 193280: - continue - makedirs(workpath, _dirname(path), 'src') - # Now the directory for the files must exist, and branch tag will be sticky - assert os.path.isdir(os.path.join(workpath, _dirname(path))) - assert k == 'A' or k == 'U' or k == 'D' - - if k == 'A' or k == 'U': - print 'add/update file ' + path + '.' - destpath = os.path.join(workpath, path) - existed = os.path.isfile(destpath) - dump_file(fs_ptr, fs_root, rev, p, path, author, date, subpool, workpath) - if not existed: - print 'cvs add file ' + path + '.' - failed = do_cvs(workpath, _dirname(path), "cvs -q add %s" % _basename(path)) - assert not failed - elif k == 'D': - print 'cvs rm -f file ' + path + '.' - failed = do_cvs(workpath, _dirname(path), "cvs -q rm -f %s" % _basename(path)) - assert not failed - pc[workpath] = _dirname(path) - - # aggregate the commit - for root, dir in pc: - fd, logfile = tempfile.mkstemp() - os.write(fd, cvslog) - os.close(fd) - failed = do_cvs(root, dir, "cvs -q commit -F %s" % logfile) - assert not failed - os.remove(logfile) - core.svn_pool_destroy(subpool) - # Loop for the export range -def export(pool, repos_path, cvspath): +def export(pool, repos_path, cvspath, cvsroot): repos_path = core.svn_path_canonicalize(repos_path) fs_ptr = repos.fs(repos.open(repos_path, pool)) while True: curr_rev = fs.youngest_rev(fs_ptr) last_rev = int(fs.revision_prop(fs_ptr, 0, 'fbsd:lastexp')) if last_rev < curr_rev: - time.sleep(5) print '%d %s' % (last_rev, curr_rev) rev = '%d' % (last_rev + 1) print '==========> export rev ' + rev - exportrev(pool, fs_ptr, last_rev + 1, cvspath) + cmd = './export2.py %s %s %d %s' % (repos_path, cvspath, last_rev + 1, cvsroot) + failed = do_export(cmd) + assert not failed fs.change_rev_prop(fs_ptr, 0, 'fbsd:lastexp', rev) continue print "." @@ -374,8 +49,4 @@ def export(pool, repos_path, cvspath): if __name__ == '__main__': print "Version: $FreeBSD$" - os.environ['CVSROOT'] = '/r/ncvs' - core.run_app(export, '/r/svnmirror/base', '/r/svn2cvs/cvs') - # test rig - #os.environ['CVSROOT'] = '/home/peter/exp/cvs' - #core.run_app(export, '/home/peter/exp/svn', '/home/peter/exp/co') + core.run_app(export, '/r/svnmirror/base', '/r/svn2cvs/cvs', '/r/ncvs') Modified: svnadmin/tools/export2.py ============================================================================== --- svnadmin/tools/export2.py Tue Aug 11 21:21:20 2009 (r196100) +++ svnadmin/tools/export2.py Tue Aug 11 21:23:31 2009 (r196101) @@ -354,28 +354,14 @@ def exportrev(pool, fs_ptr, rev, cvspath core.svn_pool_destroy(subpool) # Loop for the export range -def export(pool, repos_path, cvspath): +def export(pool, repos_path, cvspath, rev): repos_path = core.svn_path_canonicalize(repos_path) fs_ptr = repos.fs(repos.open(repos_path, pool)) - while True: - curr_rev = fs.youngest_rev(fs_ptr) - last_rev = int(fs.revision_prop(fs_ptr, 0, 'fbsd:lastexp')) - if last_rev < curr_rev: - time.sleep(5) - print '%d %s' % (last_rev, curr_rev) - rev = '%d' % (last_rev + 1) - print '==========> export rev ' + rev - exportrev(pool, fs_ptr, last_rev + 1, cvspath) - fs.change_rev_prop(fs_ptr, 0, 'fbsd:lastexp', rev) - continue - print "." - time.sleep(15) - + print '==========> export rev ' + rev + exportrev(pool, fs_ptr, rev, cvspath) if __name__ == '__main__': print "Version: $FreeBSD$" - os.environ['CVSROOT'] = '/r/ncvs' - core.run_app(export, '/r/svnmirror/base', '/r/svn2cvs/cvs') - # test rig - #os.environ['CVSROOT'] = '/home/peter/exp/cvs' - #core.run_app(export, '/home/peter/exp/svn', '/home/peter/exp/co') + assert len(sys.argv) == 5 + os.environ['CVSROOT'] = sys.argv[4] + core.run_app(export, sys.argv[1], sys.argv[2], int(sys.argv[3])) From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 21:28:26 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ED99F106564A; Tue, 11 Aug 2009 21:28:26 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DAA098FC1F; Tue, 11 Aug 2009 21:28:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BLSQiU042360; Tue, 11 Aug 2009 21:28:26 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BLSQLG042358; Tue, 11 Aug 2009 21:28:26 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200908112128.n7BLSQLG042358@svn.freebsd.org> From: Peter Wemm Date: Tue, 11 Aug 2009 21:28:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196102 - svnadmin/tools X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 21:28:27 -0000 Author: peter Date: Tue Aug 11 21:28:26 2009 New Revision: 196102 URL: http://svn.freebsd.org/changeset/base/196102 Log: Add a usage string. Modified: svnadmin/tools/export2.py Modified: svnadmin/tools/export2.py ============================================================================== --- svnadmin/tools/export2.py Tue Aug 11 21:23:31 2009 (r196101) +++ svnadmin/tools/export2.py Tue Aug 11 21:28:26 2009 (r196102) @@ -360,6 +360,10 @@ def export(pool, repos_path, cvspath, re print '==========> export rev ' + rev exportrev(pool, fs_ptr, rev, cvspath) +# +# Invoke: export2.py /r/svnmirror/base /r/svn2cvs/cvs 12345 /r/ncvs +# svn repo cvs checkout rev cvsroot +# if __name__ == '__main__': print "Version: $FreeBSD$" assert len(sys.argv) == 5 From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 21:41:21 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 91122106564A; Tue, 11 Aug 2009 21:41:21 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7D0648FC3E; Tue, 11 Aug 2009 21:41:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BLfLln042716; Tue, 11 Aug 2009 21:41:21 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BLfLFe042714; Tue, 11 Aug 2009 21:41:21 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200908112141.n7BLfLFe042714@svn.freebsd.org> From: Peter Wemm Date: Tue, 11 Aug 2009 21:41:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196104 - svnadmin/tools X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 21:41:22 -0000 Author: peter Date: Tue Aug 11 21:41:21 2009 New Revision: 196104 URL: http://svn.freebsd.org/changeset/base/196104 Log: Add 8.x placeholders Modified: svnadmin/tools/export2.py Modified: svnadmin/tools/export2.py ============================================================================== --- svnadmin/tools/export2.py Tue Aug 11 21:37:21 2009 (r196103) +++ svnadmin/tools/export2.py Tue Aug 11 21:41:21 2009 (r196104) @@ -174,6 +174,7 @@ maptable = [ ( 'stable/5/', 'RELENG_5' ), ( 'stable/6/', 'RELENG_6' ), ( 'stable/7/', 'RELENG_7' ), + ( 'stable/8/', 'RELENG_8' ), # errata / security / releng branches ( 'releng/ALPHA_2_0/','ALPHA_2_0' ), ( 'releng/BETA_2_0/', 'BETA_2_0' ), @@ -202,6 +203,8 @@ maptable = [ ( 'releng/7.0/', 'RELENG_7_0' ), ( 'releng/7.1/', 'RELENG_7_1' ), ( 'releng/7.2/', 'RELENG_7_2' ), + ( 'releng/8.0/', 'RELENG_8_0' ), + ( 'releng/8.1/', 'RELENG_8_1' ), ] def map2cvs(svnpath): From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 22:09:43 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6C05B106566C; Tue, 11 Aug 2009 22:09:43 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5AD208FC36; Tue, 11 Aug 2009 22:09:43 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BM9hxs043351; Tue, 11 Aug 2009 22:09:43 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BM9hLx043349; Tue, 11 Aug 2009 22:09:43 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <200908112209.n7BM9hLx043349@svn.freebsd.org> From: Peter Wemm Date: Tue, 11 Aug 2009 22:09:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196106 - svnadmin/tools X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 22:09:43 -0000 Author: peter Date: Tue Aug 11 22:09:43 2009 New Revision: 196106 URL: http://svn.freebsd.org/changeset/base/196106 Log: Remove a broken printf. There's no need to print the rev that we passed on the command line. That's for the driver to log, not here. Modified: svnadmin/tools/export2.py Modified: svnadmin/tools/export2.py ============================================================================== --- svnadmin/tools/export2.py Tue Aug 11 22:08:46 2009 (r196105) +++ svnadmin/tools/export2.py Tue Aug 11 22:09:43 2009 (r196106) @@ -360,7 +360,6 @@ def exportrev(pool, fs_ptr, rev, cvspath def export(pool, repos_path, cvspath, rev): repos_path = core.svn_path_canonicalize(repos_path) fs_ptr = repos.fs(repos.open(repos_path, pool)) - print '==========> export rev ' + rev exportrev(pool, fs_ptr, rev, cvspath) # From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 23:04:16 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CC7F6106566B; Tue, 11 Aug 2009 23:04:16 +0000 (UTC) (envelope-from simon@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BB3B78FC3A; Tue, 11 Aug 2009 23:04:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BN4GGF044569; Tue, 11 Aug 2009 23:04:16 GMT (envelope-from simon@svn.freebsd.org) Received: (from simon@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BN4GVi044567; Tue, 11 Aug 2009 23:04:16 GMT (envelope-from simon@svn.freebsd.org) Message-Id: <200908112304.n7BN4GVi044567@svn.freebsd.org> From: "Simon L. Nielsen" Date: Tue, 11 Aug 2009 23:04:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196108 - svnadmin/tools X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 23:04:17 -0000 Author: simon Date: Tue Aug 11 23:04:16 2009 New Revision: 196108 URL: http://svn.freebsd.org/changeset/base/196108 Log: Add stable/8, releng/8.0, and releng/8.1. Modified: svnadmin/tools/export.py Modified: svnadmin/tools/export.py ============================================================================== --- svnadmin/tools/export.py Tue Aug 11 22:26:10 2009 (r196107) +++ svnadmin/tools/export.py Tue Aug 11 23:04:16 2009 (r196108) @@ -174,6 +174,7 @@ maptable = [ ( 'stable/5/', 'RELENG_5' ), ( 'stable/6/', 'RELENG_6' ), ( 'stable/7/', 'RELENG_7' ), + ( 'stable/8/', 'RELENG_8' ), # errata / security / releng branches ( 'releng/ALPHA_2_0/','ALPHA_2_0' ), ( 'releng/BETA_2_0/', 'BETA_2_0' ), @@ -202,6 +203,8 @@ maptable = [ ( 'releng/7.0/', 'RELENG_7_0' ), ( 'releng/7.1/', 'RELENG_7_1' ), ( 'releng/7.2/', 'RELENG_7_2' ), + ( 'releng/8.0/', 'RELENG_8_0' ), + ( 'releng/8.1/', 'RELENG_8_1' ), ] def map2cvs(svnpath): From owner-svn-src-svnadmin@FreeBSD.ORG Tue Aug 11 23:05:47 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 578F2106564A; Tue, 11 Aug 2009 23:05:47 +0000 (UTC) (envelope-from simon@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4657E8FC3D; Tue, 11 Aug 2009 23:05:47 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7BN5lCh044641; Tue, 11 Aug 2009 23:05:47 GMT (envelope-from simon@svn.freebsd.org) Received: (from simon@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7BN5l9R044638; Tue, 11 Aug 2009 23:05:47 GMT (envelope-from simon@svn.freebsd.org) Message-Id: <200908112305.n7BN5l9R044638@svn.freebsd.org> From: "Simon L. Nielsen" Date: Tue, 11 Aug 2009 23:05:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196109 - svnadmin/tools X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Aug 2009 23:05:47 -0000 Author: simon Date: Tue Aug 11 23:05:47 2009 New Revision: 196109 URL: http://svn.freebsd.org/changeset/base/196109 Log: Add releng/7.3 while updating branches anyway. Modified: svnadmin/tools/export.py svnadmin/tools/export2.py Modified: svnadmin/tools/export.py ============================================================================== --- svnadmin/tools/export.py Tue Aug 11 23:04:16 2009 (r196108) +++ svnadmin/tools/export.py Tue Aug 11 23:05:47 2009 (r196109) @@ -203,6 +203,7 @@ maptable = [ ( 'releng/7.0/', 'RELENG_7_0' ), ( 'releng/7.1/', 'RELENG_7_1' ), ( 'releng/7.2/', 'RELENG_7_2' ), + ( 'releng/7.3/', 'RELENG_7_3' ), ( 'releng/8.0/', 'RELENG_8_0' ), ( 'releng/8.1/', 'RELENG_8_1' ), ] Modified: svnadmin/tools/export2.py ============================================================================== --- svnadmin/tools/export2.py Tue Aug 11 23:04:16 2009 (r196108) +++ svnadmin/tools/export2.py Tue Aug 11 23:05:47 2009 (r196109) @@ -203,6 +203,7 @@ maptable = [ ( 'releng/7.0/', 'RELENG_7_0' ), ( 'releng/7.1/', 'RELENG_7_1' ), ( 'releng/7.2/', 'RELENG_7_2' ), + ( 'releng/7.3/', 'RELENG_7_3' ), ( 'releng/8.0/', 'RELENG_8_0' ), ( 'releng/8.1/', 'RELENG_8_1' ), ] From owner-svn-src-svnadmin@FreeBSD.ORG Wed Aug 12 21:05:59 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6E48E106564A; Wed, 12 Aug 2009 21:05:59 +0000 (UTC) (envelope-from simon@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 44C558FC3A; Wed, 12 Aug 2009 21:05:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7CL5xv6076661; Wed, 12 Aug 2009 21:05:59 GMT (envelope-from simon@svn.freebsd.org) Received: (from simon@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7CL5xAA076659; Wed, 12 Aug 2009 21:05:59 GMT (envelope-from simon@svn.freebsd.org) Message-Id: <200908122105.n7CL5xAA076659@svn.freebsd.org> From: "Simon L. Nielsen" Date: Wed, 12 Aug 2009 21:05:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196156 - svnadmin/conf X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2009 21:05:59 -0000 Author: simon Date: Wed Aug 12 21:05:58 2009 New Revision: 196156 URL: http://svn.freebsd.org/changeset/base/196156 Log: - Improve matching of paths to reduce risk of matching the wrong branch. - Add stable/8 support. Submitted by: des, Dimitry Andric Modified: svnadmin/conf/mailer.conf Modified: svnadmin/conf/mailer.conf ============================================================================== --- svnadmin/conf/mailer.conf Wed Aug 12 21:03:16 2009 (r196155) +++ svnadmin/conf/mailer.conf Wed Aug 12 21:05:58 2009 (r196156) @@ -335,54 +335,58 @@ truncate_subject = 200 # [svnadmin] -for_paths = svnadmin/.* +for_paths = ^svnadmin(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-svnadmin@freebsd.org [head] -for_paths = head/.* +for_paths = ^head(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-head@freebsd.org +[stable-8] +for_paths = ^stable/8(/[^/]+)*$ +to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-stable@freebsd.org svn-src-stable-8@freebsd.org + [stable-7] -for_paths = stable/7/.* +for_paths = ^stable/7(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-stable@freebsd.org svn-src-stable-7@freebsd.org [stable-6] -for_paths = stable/6/.* +for_paths = ^stable/6(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-stable@freebsd.org svn-src-stable-6@freebsd.org [stable-other] -for_paths = stable/[^67]/.* +for_paths = ^stable/[^678](/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-stable@freebsd.org svn-src-stable-other@freebsd.org [projects] -for_paths = projects/.* +for_paths = ^projects(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-projects@freebsd.org [user] -for_paths = user/.* +for_paths = ^user(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-user@freebsd.org [release] -for_paths = release/.* +for_paths = ^release(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-release@freebsd.org [releng] -for_paths = releng.* +for_paths = ^releng(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-releng@freebsd.org [vendor] -for_paths = vendor.* +for_paths = ^vendor(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-vendor@freebsd.org [vendor-cddl] -for_paths = vendor-cddl/.* +for_paths = ^vendor-cddl(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-vendor@freebsd.org [vendor-crypto] -for_paths = vendor-crypto/.* +for_paths = ^vendor-crypto(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-vendor@freebsd.org [vendor-sys] -for_paths = vendor-sys/.* +for_paths = ^vendor-sys(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-vendor@freebsd.org From owner-svn-src-svnadmin@FreeBSD.ORG Wed Aug 12 21:06:44 2009 Return-Path: Delivered-To: svn-src-svnadmin@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 55410106564A; Wed, 12 Aug 2009 21:06:44 +0000 (UTC) (envelope-from simon@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 451838FC4D; Wed, 12 Aug 2009 21:06:44 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n7CL6iev076757; Wed, 12 Aug 2009 21:06:44 GMT (envelope-from simon@svn.freebsd.org) Received: (from simon@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n7CL6iT2076755; Wed, 12 Aug 2009 21:06:44 GMT (envelope-from simon@svn.freebsd.org) Message-Id: <200908122106.n7CL6iT2076755@svn.freebsd.org> From: "Simon L. Nielsen" Date: Wed, 12 Aug 2009 21:06:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-svnadmin@freebsd.org X-SVN-Group: svnadmin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r196158 - svnadmin/conf X-BeenThere: svn-src-svnadmin@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the admin / configuration tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Aug 2009 21:06:47 -0000 Author: simon Date: Wed Aug 12 21:06:43 2009 New Revision: 196158 URL: http://svn.freebsd.org/changeset/base/196158 Log: Remove empty line... really 'forced' commit to test updated mailer config. Modified: svnadmin/conf/mailer.conf Modified: svnadmin/conf/mailer.conf ============================================================================== --- svnadmin/conf/mailer.conf Wed Aug 12 21:06:37 2009 (r196157) +++ svnadmin/conf/mailer.conf Wed Aug 12 21:06:43 2009 (r196158) @@ -389,4 +389,3 @@ to_addr = src-committers@freebsd.org svn [vendor-sys] for_paths = ^vendor-sys(/[^/]+)*$ to_addr = src-committers@freebsd.org svn-src-all@freebsd.org svn-src-vendor@freebsd.org -