|
Boost : |
From: Beman Dawes (bdawes_at_[hidden])
Date: 2007-11-30 18:10:27
Eric Niebler wrote:
> Beman Dawes wrote:
>> Beman Dawes wrote:
>>> Until further notice, branches/release is open for known-good merges.
>>>
>>> "known-good" means changes that are already passing trunk regression
>>> tests, or are in files like documentation that have no effect on testing.
>
> Apparently, some of us morons need more help with this crazy merge
> thing. I need to merge revisions 41419-41420 from trunk to release, so I
> did what seemed the most logical thing:
>
> svn co https://svn.boost.org/svn/boost/branches/release
> cd release
> svnmerge.py merge -r 41419-41420
>
> The svnmerge.py invocation does *nothing* ... no merge, no output, no
> errors. Any help?
Because I always want all my trunk changes merged into branches/release,
I'm not using svnmerge.py, and am doing a tree-to-tree rather than
revsion-to-revision merge.
Also, I don't want to have to do multiple merges for
boost-root/libs/library-name, boost-root/boost/library-name, and then
also individual header files in boost-root//boost, I use a script to
automate merges. See attached. The script requires environmental
variable BOOST_MERGED_TO_RELEASE be a path to the current trunk, and the
current branches/release also checked out, say in /boost/release.
Then:
cd /boost/release
merge_release --dry-run filesystem
will do a dry run of the merge. You can then do:
merge_release filesystem
for the actual merge. Then after local testing, the commit is done normally.
Below is what it looked like for a merge I just did. Note the message
giving the revision number, which I use in the commit message.
HTH, even if it doesn't directly answer your question.
--Beman
D:\>cd \boost\release
D:\boost\release>merge_release.py filesystem
command: svn info --xml d:\boost\merged-to-release
>e:\temp/merged_to_release-svn_info.xml
Using d:\boost\merged-to-release revision 41517 as trunk merge point
Merging boost-root/boost/ filesystem ...
command: svn merge
https://svn.boost.org/svn/boost/branches/release/boost/filesy
stem https://svn.boost.org/svn/boost/trunk/boost/filesystem@41517
boost/filesystem
Merging boost-root/libs/ filesystem ...
command: svn merge
https://svn.boost.org/svn/boost/branches/release/libs/filesys
tem https://svn.boost.org/svn/boost/trunk/libs/filesystem@41517
libs/filesystem
U libs/filesystem/doc/index.htm
U libs/filesystem/src/path.cpp
A libs/filesystem/example/vc++.bat
U libs/filesystem/example/simple_ls.cpp
U libs/filesystem/example/file_size.cpp
command: svn merge
https://svn.boost.org/svn/boost/branches/release/boost/filesystem.hpp
https://svn.boost.org/svn/boost/trunk/boost/filesystem.hpp@41517
boost/filesystem.hpp
# merge diff between branches/release and trunk into working copy
# Copyright Beman Dawes 2007
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
# ---------------------------------------------------------------------------- #
import os
import sys
import platform
import time
import ftplib
# invoke the system command line processor
def cmd(command):
print "command:", command
os.system(command)
# get revision number of a path, which may be a filesystem path or URL
def revision(path, results_path, test_name):
rev = 0
svn_info_file = results_path + "/" + test_name + "-svn_info.xml"
command = "svn info --xml " + path + " >" + svn_info_file
cmd(command)
f = open( svn_info_file, 'r' )
svn_info = f.read()
f.close()
i = svn_info.find( 'revision=' )
if i >= 0:
i += 10
while svn_info[i] >= '0' and svn_info[i] <= '9':
rev = rev*10 + int(svn_info[i])
i += 1
return rev
# invoke svn merge
def svn_merge(options, path, trunk_rev):
print
cmd("svn merge "+options+"https://svn.boost.org/svn/boost/branches/release/"
+path+" https://svn.boost.org/svn/boost/trunk/"+path+"@"+str(trunk_rev)+" "+path)
# ---------------------------------------------------------------------------- #
if len(sys.argv) < 2:
print "Usage: merge_release.py [options] LIBRARY-NAME"
print " Does svn merge to release from trunk for any boost-root/boost"
print " headers associated with the library, the boost/LIBRARY-NAME directory"
print " and the libs/LIBRARY-NAME directory. Options are the svn merge options."
print "Example: merge_release.py --dry-run filesystem"
exit(1)
if not os.path.exists("LICENSE_1_0.txt") or not os.path.exists("libs") or not os.path.exists("boost"):
print "Error: This program must run from the boost-root directory"
exit(1)
options = ""
i = 1
while i < len(sys.argv)-1:
options += sys.argv[i]+" "
i += 1
library_name = sys.argv[i]
trunk_merged_to_release = os.environ['BOOST_MERGED_TO_RELEASE']
if len(trunk_merged_to_release) == 0:
print "Error: Must set BOOST_MERGED_TO_RELEASE to trunk path"
exit(1)
trunk_revision = revision(trunk_merged_to_release, os.environ['TEMP'], 'merged_to_release')
print "Using", trunk_merged_to_release, "revision", trunk_revision, "as trunk merge point"
print "Merging boost-root/boost/", library_name, "..."
svn_merge(options, "boost/" + library_name, trunk_revision)
print
print "Merging boost-root/libs/", library_name, "..."
svn_merge(options, "libs/" + library_name, trunk_revision)
#print
grepcmd = "grep -E -l \"www.boost.org/libs/"+library_name+"([ /]|$)\" boost/*.h*"
#print "Searching headers with", grepcmd
for hdr in os.popen(grepcmd).readlines():
svn_merge(options, hdr[0:len(hdr)-1], trunk_revision)
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk