subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ar...@apache.org
Subject svn commit: r1148749 [11/11] - in /subversion/branches/svn-bisect: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ contrib/hook-scripts/ contrib/hook-scripts/enforcer/ contrib/server-side/ contrib/server-side/fsfsfixer/fixer/ not...
Date Wed, 20 Jul 2011 13:06:16 GMT
Modified: subversion/branches/svn-bisect/tools/buildbot/slaves/ubuntu-x64/svnclean.sh
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/buildbot/slaves/ubuntu-x64/svnclean.sh?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/buildbot/slaves/ubuntu-x64/svnclean.sh (original)
+++ subversion/branches/svn-bisect/tools/buildbot/slaves/ubuntu-x64/svnclean.sh Wed Jul 20 13:06:00 2011
@@ -22,10 +22,6 @@
 
 set -x
 
-echo "========= unmount RAM disc"
-# ignore the result: if there was no ramdisc, that's fine
-test -e ../unmount-ramdrive && ../unmount-ramdrive
-
 echo "========= make extraclean"
 cd build
 test -e Makefile && (make extraclean || exit $?)

Modified: subversion/branches/svn-bisect/tools/client-side/svnmucc/svnmucc.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/client-side/svnmucc/svnmucc.c?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/client-side/svnmucc/svnmucc.c (original)
+++ subversion/branches/svn-bisect/tools/client-side/svnmucc/svnmucc.c Wed Jul 20 13:06:00 2011
@@ -1,21 +1,24 @@
 /*
+ * svnmucc.c: Subversion Multiple URL Client
  *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
+ * ====================================================================
+ *    Licensed to the Apache Software Foundation (ASF) under one
+ *    or more contributor license agreements.  See the NOTICE file
+ *    distributed with this work for additional information
+ *    regarding copyright ownership.  The ASF licenses this file
+ *    to you under the Apache License, Version 2.0 (the
+ *    "License"); you may not use this file except in compliance
+ *    with the License.  You may obtain a copy of the License at
  *
- *   http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
+ *    Unless required by applicable law or agreed to in writing,
+ *    software distributed under the License is distributed on an
+ *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *    KIND, either express or implied.  See the License for the
+ *    specific language governing permissions and limitations
+ *    under the License.
+ * ====================================================================
  *
  */
 
@@ -23,10 +26,6 @@
 
     Combine a list of mv, cp and rm commands on URLs into a single commit.
 
-    Copyright 2005 Philip Martin <philip@codematters.co.uk>
-
-    Licenced under the same terms as Subversion.
-
     How it works: the command line arguments are parsed into an array of
     action structures.  The action structures are interpreted to build a
     tree of operation structures.  The tree of operation structures is
@@ -110,13 +109,14 @@ create_ra_callbacks(svn_ra_callbacks2_t 
                     const char *username,
                     const char *password,
                     svn_boolean_t non_interactive,
+                    svn_boolean_t no_auth_cache,
                     apr_pool_t *pool)
 {
   SVN_ERR(svn_ra_create_callbacks(callbacks, pool));
 
   SVN_ERR(svn_cmdline_create_auth_baton(&(*callbacks)->auth_baton,
                                         non_interactive,
-                                        username, password, NULL, FALSE,
+                                        username, password, NULL, no_auth_cache,
                                         FALSE, NULL, NULL, NULL, pool));
 
   (*callbacks)->open_tmp_file = open_tmp_file;
@@ -618,6 +618,7 @@ execute(const apr_array_header_t *action
         const char *config_dir,
         const apr_array_header_t *config_options,
         svn_boolean_t non_interactive,
+        svn_boolean_t no_auth_cache,
         svn_revnum_t base_revision,
         apr_pool_t *pool)
 {
@@ -635,7 +636,7 @@ execute(const apr_array_header_t *action
   SVN_ERR(svn_cmdline__apply_config_options(config, config_options,
                                             "svnmucc: ", "--config-option"));
   SVN_ERR(create_ra_callbacks(&ra_callbacks, username, password,
-                              non_interactive, pool));
+                              non_interactive, no_auth_cache, pool));
   SVN_ERR(svn_ra_open4(&session, NULL, anchor, NULL, ra_callbacks,
                        NULL, config, pool));
 
@@ -780,7 +781,9 @@ usage(apr_pool_t *pool, int exit_val)
     "  -X, --extra-args ARG  append arguments from file ARG (one per line;\n"
     "                        use \"-\" to read from standard input)\n"
     "  --config-dir ARG      use ARG to override the config directory\n"
-    "  --config-option ARG   use ARG so override a configuration option\n";
+    "  --config-option ARG   use ARG so override a configuration option\n"
+    "  --no-auth-cache       do not cache authentication tokens\n"
+    "  --version             print version information\n";
   svn_error_clear(svn_cmdline_fputs(msg, stream, pool));
   apr_pool_destroy(pool);
   exit(exit_val);
@@ -794,6 +797,22 @@ insufficient(apr_pool_t *pool)
                pool);
 }
 
+static svn_error_t *
+display_version(apr_getopt_t *os, apr_pool_t *pool)
+{
+  const char *ra_desc_start
+    = "The following repository access (RA) modules are available:\n\n";
+  svn_stringbuf_t *version_footer;
+
+  version_footer = svn_stringbuf_create(ra_desc_start, pool);
+  SVN_ERR(svn_ra_print_modules(version_footer, pool));
+
+  SVN_ERR(svn_opt_print_help3(os, "svnmucc", TRUE, FALSE, version_footer->data,
+                              NULL, NULL, NULL, NULL, NULL, pool));
+
+  return SVN_NO_ERROR;
+}
+
 int
 main(int argc, const char **argv)
 {
@@ -806,6 +825,8 @@ main(int argc, const char **argv)
   enum {
     config_dir_opt = SVN_OPT_FIRST_LONGOPT_ID,
     config_inline_opt,
+    no_auth_cache_opt,
+    version_opt,
     with_revprop_opt
   };
   const apr_getopt_option_t options[] = {
@@ -821,6 +842,8 @@ main(int argc, const char **argv)
     {"non-interactive", 'n', 0, ""},
     {"config-dir", config_dir_opt, 1, ""},
     {"config-option",  config_inline_opt, 1, ""},
+    {"no-auth-cache",  no_auth_cache_opt, 0, ""},
+    {"version", version_opt, 0, ""},
     {NULL, 0, 0, NULL}
   };
   const char *message = NULL;
@@ -829,6 +852,7 @@ main(int argc, const char **argv)
   const char *config_dir = NULL;
   apr_array_header_t *config_options;
   svn_boolean_t non_interactive = FALSE;
+  svn_boolean_t no_auth_cache = FALSE;
   svn_revnum_t base_revision = SVN_INVALID_REVNUM;
   apr_array_header_t *action_args;
   apr_hash_t *revprops = apr_hash_make(pool);
@@ -924,6 +948,13 @@ main(int argc, const char **argv)
           if (err)
             handle_error(err, pool);
           break;
+        case no_auth_cache_opt:
+          no_auth_cache = TRUE;
+          break;
+        case version_opt:
+          SVN_INT_ERR(display_version(getopt, pool));
+          exit(EXIT_SUCCESS);
+          break;
         case 'h':
           usage(pool, EXIT_SUCCESS);
           break;
@@ -1159,7 +1190,7 @@ main(int argc, const char **argv)
 
   if ((err = execute(actions, anchor, revprops, username, password,
                      config_dir, config_options, non_interactive,
-                     base_revision, pool)))
+                     no_auth_cache, base_revision, pool)))
     handle_error(err, pool);
 
   svn_pool_destroy(pool);

Propchange: subversion/branches/svn-bisect/tools/dev/benchmarks/suite1/benchmark.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dev/gen-py-errors.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dev/gen_junit_report.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dev/log_revnum_change_asf.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dev/mklog.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/svn-bisect/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/dev/unix-build/Makefile.svn?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/svn-bisect/tools/dev/unix-build/Makefile.svn Wed Jul 20 13:06:00 2011
@@ -19,14 +19,16 @@
 #
 # WARNING: This may or may not work on your system. This Makefile is
 # an example, rather than a ready-made universal solution.
-#
-# Note to Subversion committers:
-# This Makefile is used by the bb-openbsd buildbot
-# (http://ci.apache.org/builders/bb-openbsd).
-# Please check the bot's health after making changes to this file.
 
-ENABLE_PYTHON_BINDINGS ?= yes
-ENABLE_RUBY_BINDINGS ?= yes
+#   ****************************************************************
+#   **       IMPORTANT NOTE FOR SVN COMMITTERS:  READ THIS.       **
+#   **                                                            **
+#   ****************************************************************
+#   | This Makefile is used by the bb-openbsd buildbot             |
+#   | (http://ci.apache.org/builders/bb-openbsd). Please check     |
+#   | the bot's health after making changes to this file.          |
+#   |______________________________________________________________|
+
 ENABLE_PERL_BINDINGS ?= yes
 ENABLE_JAVA_BINDINGS ?= no # they don't build with thread-less APR...
 USE_APR_ICONV ?= no # set to yes to use APR iconv instead of GNU iconv
@@ -64,11 +66,14 @@ GNU_ICONV_VER	= 1.13.1
 APR_UTIL_VER	= 1.3.12
 HTTPD_VER	= 2.2.19
 NEON_VER	= 0.29.6
-SERF_VER	= 0.7.x
+SERF_VER	= 1.0.0
 SERF_OLD_VER	= 0.3.1
 CYRUS_SASL_VER	= 2.1.23
 SQLITE_VER	= 3070603
 LIBMAGIC_VER	= 5.07
+RUBY_VER	= 1.8.7-p334
+BZ2_VER	= 1.0.6
+PYTHON_VER	= 2.7.2
 
 BDB_DIST	= db-$(BDB_VER).tar.gz
 APR_ICONV_DIST	= apr-iconv-$(APR_ICONV_VER).tar.gz
@@ -78,6 +83,9 @@ SQLITE_DIST	= sqlite-autoconf-$(SQLITE_V
 CYRUS_SASL_DIST	= cyrus-sasl-$(CYRUS_SASL_VER).tar.gz
 HTTPD_DIST	= httpd-$(HTTPD_VER).tar.bz2
 LIBMAGIC_DIST	= file-$(LIBMAGIC_VER).tar.gz
+RUBY_DIST	= ruby-$(RUBY_VER).tar.gz
+BZ2_DIST	= bzip2-$(BZ2_VER).tar.gz
+PYTHON_DIST	= Python-$(PYTHON_VER).tgz
 
 DISTFILES	= $(DISTDIR)/$(NEON_DIST) \
 		$(DISTDIR)/$(SERF_DIST) \
@@ -86,7 +94,10 @@ DISTFILES	= $(DISTDIR)/$(NEON_DIST) \
 		$(DISTDIR)/$(APR_ICONV_DIST) \
 		$(DISTDIR)/$(GNU_ICONV_DIST) \
 		$(DISTDIR)/$(CYRUS_SASL_DIST) \
-		$(DISTDIR)/$(LIBMAGIC_DIST)
+		$(DISTDIR)/$(LIBMAGIC_DIST) \
+		$(DISTDIR)/$(RUBY_DIST) \
+		$(DISTDIR)/$(BZ2_DIST) \
+		$(DISTDIR)/$(PYTHON_DIST)
 
 FETCH_CMD	= wget -c
 
@@ -99,11 +110,14 @@ APR_UTIL_URL	= http://svn.apache.org/rep
 HTTPD_URL	= http://archive.apache.org/dist/httpd/$(HTTPD_DIST)
 NEON_URL	= http://webdav.org/neon/$(NEON_DIST)
 #SERF_URL	= http://serf.googlecode.com/files/$(SERF_DIST)
-SERF_URL	= http://serf.googlecode.com/svn/branches/$(SERF_VER)
+SERF_URL	= http://serf.googlecode.com/svn/tags/$(SERF_VER)
 SERF_OLD_URL	= http://serf.googlecode.com/svn/tags/$(SERF_OLD_VER)
 SQLITE_URL	= http://www.sqlite.org/$(SQLITE_DIST)
 CYRUS_SASL_URL	= ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/$(CYRUS_SASL_DIST)
 LIBMAGIC_URL	= ftp://ftp.astron.com/pub/file/$(LIBMAGIC_DIST)
+RUBY_URL	= http://ftp.ruby-lang.org/pub/ruby/1.8/$(RUBY_DIST)
+BZ2_URL		= http://bzip.org/$(BZ2_VER)/$(BZ2_DIST)
+PYTHON_URL	= http://python.org/ftp/python/2.7.2/$(PYTHON_DIST)
 
 BDB_SRCDIR	= $(SRCDIR)/db-$(BDB_VER)
 APR_SRCDIR	= $(SRCDIR)/apr-$(APR_VER)
@@ -117,6 +131,9 @@ SERF_OLD_SRCDIR	= $(SRCDIR)/serf-$(SERF_
 SQLITE_SRCDIR	= $(SRCDIR)/sqlite-autoconf-$(SQLITE_VER)
 CYRUS_SASL_SRCDIR	= $(SRCDIR)/cyrus-sasl-$(CYRUS_SASL_VER)
 LIBMAGIC_SRCDIR	= $(SRCDIR)/file-$(LIBMAGIC_VER)
+RUBY_SRCDIR	= $(SRCDIR)/ruby-$(RUBY_VER)
+BZ2_SRCDIR	= $(SRCDIR)/bzip2-$(BZ2_VER)
+PYTHON_SRCDIR	= $(SRCDIR)/Python-$(PYTHON_VER)
 SVN_SRCDIR	= $(SVN_WC)
 
 BDB_OBJDIR	= $(OBJDIR)/db-$(BDB_VER)
@@ -131,6 +148,9 @@ SERF_OLD_OBJDIR	= $(OBJDIR)/serf-$(SERF_
 SQLITE_OBJDIR	= $(OBJDIR)/sqlite-$(SQLITE_VER)
 CYRUS_SASL_OBJDIR	= $(OBJDIR)/cyrus-sasl-$(CYRUS_SASL_VER)
 LIBMAGIC_OBJDIR	= $(OBJDIR)/file-$(LIBMAGIC_VER)
+RUBY_OBJDIR	= $(OBJDIR)/ruby-$(RUBY_VER)
+BZ2_OBJDIR	= $(OBJDIR)/bzip2-$(BZ2_VER)
+PYTHON_OBJDIR	= $(OBJDIR)/python-$(PYTHON_VER)
 SVN_OBJDIR	= $(OBJDIR)/$(SVN_REL_WC)
 
 # Tweak this for out-of-tree builds. Note that running individual
@@ -142,6 +162,9 @@ ifdef PROFILE
 PROFILE_CFLAGS=-pg
 endif
 
+# We need this to make sure some targets below pick up the right libraries
+LD_LIBRARY_PATH=$(PREFIX)/apr/lib:$(PREFIX)/iconv/lib:$(PREFIX)/bdb/lib:$(PREFIX)/neon/lib:$(PREFIX)/serf/lib:$(PREFIX)/sqlite/lib:$(PREFIX)/cyrus-sasl/lib:$(PREFIX)/iconv/lib:$(PREFIX)/libmagic/lib:$(PREFIX)/ruby/lib:$(PREFIX)/python/lib:$(PREFIX)/svn-$(WC)/lib
+
 #######################################################################
 # Main targets.
 #######################################################################
@@ -151,17 +174,19 @@ endif
 all: dirs-create bdb-install apr-install iconv-install apr-util-install \
 	httpd-install neon-install serf-install serf-old-install \
 	sqlite-install cyrus-sasl-install libmagic-install \
+	ruby-install bz2-install python-install \
 	svn-install svn-bindings-install
 
 # Use these to start a build from the beginning.
 reset: dirs-reset bdb-reset apr-reset iconv-reset apr-util-reset \
 	httpd-reset neon-reset serf-reset serf-old-reset sqlite-reset \
-	cyrus-sasl-reset libmagic-reset svn-reset
+	cyrus-sasl-reset libmagic-reset ruby-reset python-reset \
+	bz2-reset svn-reset
 
 # Use to save disk space.
 clean: bdb-clean apr-clean iconv-clean apr-util-clean httpd-clean \
 	neon-clean serf-clean serf-old-clean sqlite-clean cyrus-sasl-clean \
-	libmagic-clean svn-clean
+	libmagic-clean ruby-clean bz2-clean python-clean svn-clean
 
 # Nukes everything (including installed binaries!)
 # Use this to start ALL OVER AGAIN! Use with caution!
@@ -366,7 +391,7 @@ $(DISTDIR)/$(GNU_ICONV_DIST):
 	cd $(DISTDIR) && $(FETCH_CMD) $(GNU_ICONV_URL)
 
 $(GNU_ICONV_OBJDIR)/lib_encodings.def.diff:
-	mkdir -p $(dirname $@)
+	mkdir -p $(dir $@)
 	echo > $@.tmp '--- lib/encodings.def.orig	Wed Oct 24 23:41:41 2007'
 	echo >>$@.tmp '+++ lib/encodings.def	Wed Oct 24 23:43:47 2007'
 	echo >>$@.tmp '@@ -37,6 +37,7 @@'
@@ -380,7 +405,7 @@ $(GNU_ICONV_OBJDIR)/lib_encodings.def.di
 	mv -f $@.tmp $@
 
 $(GNU_ICONV_OBJDIR)/lib_aliases.gperf.diff:
-	mkdir -p $(dirname $@)
+	mkdir -p $(dir $@)
 	echo > $@.tmp '--- lib/aliases.gperf.orig	Wed Oct 24 23:41:32 2007'
 	echo >>$@.tmp '+++ lib/aliases.gperf	Wed Oct 24 23:47:38 2007'
 	echo >>$@.tmp '@@ -10,6 +10,7 @@ struct alias { int name; unsigned int encoding_index; '
@@ -549,7 +574,7 @@ $(HTTPD_OBJDIR)/.installed: $(HTTPD_OBJD
 
 # create a httpd.conf for mod_dav_svn
 $(HTTPD_CONF):
-	mkdir -p $(dirname $@)
+	mkdir -p $(dir $@)
 	echo > $@.tmp '# httpd config for use with mod_dav_svn'
 	echo >>$@.tmp 'ServerRoot "$(PREFIX)/httpd"'
 	echo >>$@.tmp 'Listen localhost:8080'
@@ -811,6 +836,12 @@ ifeq ($(UNAME),OpenBSD)
 	done
 	chmod +x $(CYRUS_SASL_SRCDIR)/configure
 endif
+	# Fixes excessive auth log spam from sasl if broken .la files exist
+	sed 's/SASL_LOG_WARN/SASL_LOG_DEBUG/' \
+		< $(CYRUS_SASL_SRCDIR)/lib/dlopen.c \
+		> $(CYRUS_SASL_SRCDIR)/lib/dlopen.c.patched
+	mv $(CYRUS_SASL_SRCDIR)/lib/dlopen.c.patched \
+		$(CYRUS_SASL_SRCDIR)/lib/dlopen.c
 	touch $@
 
 # configure cyrus-sasl
@@ -884,6 +915,157 @@ $(LIBMAGIC_OBJDIR)/.installed: $(LIBMAGI
 	(cd $(LIBMAGIC_OBJDIR) && make install)
 	touch $@
 
+#######################################################################
+# ruby
+#######################################################################
+
+ruby-retrieve:	$(RUBY_OBJDIR)/.retrieved
+ruby-configure:	$(RUBY_OBJDIR)/.configured
+ruby-compile:	$(RUBY_OBJDIR)/.compiled
+ruby-install:	$(RUBY_OBJDIR)/.installed
+ruby-reset:
+	$(foreach f, .retrieved .configured .compiled .installed, \
+		rm -f $(RUBY_OBJDIR)/$(f);)
+
+ruby-clean:
+	-(cd $(RUBY_OBJDIR) && make distclean)
+
+# fetch distfile for ruby
+$(DISTDIR)/$(RUBY_DIST):
+	cd $(DISTDIR) && $(FETCH_CMD) $(RUBY_URL)
+
+# retrieve ruby
+#
+$(RUBY_OBJDIR)/.retrieved: $(DISTDIR)/$(RUBY_DIST)
+	[ -d $(RUBY_OBJDIR) ] || mkdir -p $(RUBY_OBJDIR)
+	tar -C $(SRCDIR) -zxf $(DISTDIR)/$(RUBY_DIST)
+	touch $@
+
+# configure ruby
+$(RUBY_OBJDIR)/.configured: $(RUBY_OBJDIR)/.retrieved
+	cd $(RUBY_OBJDIR) \
+		&& env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`"\
+		$(RUBY_SRCDIR)/configure \
+		--prefix=$(PREFIX)/ruby \
+		--enable-shared \
+		--disable-pthread
+	touch $@
+
+# compile ruby
+$(RUBY_OBJDIR)/.compiled: $(RUBY_OBJDIR)/.configured
+	(cd $(RUBY_OBJDIR) && make)
+	touch $@
+
+# install ruby
+$(RUBY_OBJDIR)/.installed: $(RUBY_OBJDIR)/.compiled
+	(cd $(RUBY_OBJDIR) && make install)
+	touch $@
+
+#######################################################################
+# bz2
+#######################################################################
+
+bz2-retrieve:	$(BZ2_OBJDIR)/.retrieved
+bz2-compile:	$(BZ2_OBJDIR)/.compiled
+bz2-install:	$(BZ2_OBJDIR)/.installed
+bz2-reset:
+	$(foreach f, .retrieved .configured .compiled .installed, \
+		rm -f $(BZ2_OBJDIR)/$(f);)
+
+bz2-clean:
+	-(cd $(BZ2_SRCDIR) && make distclean)
+
+# fetch distfile for bz2
+$(DISTDIR)/$(BZ2_DIST):
+	cd $(DISTDIR) && $(FETCH_CMD) $(BZ2_URL)
+
+# retrieve bz2
+$(BZ2_OBJDIR)/.retrieved: $(DISTDIR)/$(BZ2_DIST)
+	[ -d $(BZ2_OBJDIR) ] || mkdir -p $(BZ2_OBJDIR)
+	tar -C $(SRCDIR) -zxf $(DISTDIR)/$(BZ2_DIST)
+	touch $@
+
+# compile bz2
+$(BZ2_OBJDIR)/.compiled: $(BZ2_OBJDIR)/.retrieved
+	(cd $(BZ2_SRCDIR) && make CFLAGS="-g $(PROFILE_CFLAGS) -fPIC")
+	touch $@
+
+# install bz2
+$(BZ2_OBJDIR)/.installed: $(BZ2_OBJDIR)/.compiled
+	(cd $(BZ2_SRCDIR) && make install PREFIX=$(PREFIX)/bz2)
+	touch $@
+
+
+#######################################################################
+# python
+#######################################################################
+
+python-retrieve:	$(PYTHON_OBJDIR)/.retrieved
+python-configure:	$(PYTHON_OBJDIR)/.configured
+python-compile:	$(PYTHON_OBJDIR)/.compiled
+python-install:	$(PYTHON_OBJDIR)/.installed
+python-reset:
+	$(foreach f, .retrieved .configured .compiled .installed, \
+		rm -f $(PYTHON_OBJDIR)/$(f);)
+
+python-clean:
+	-(cd $(PYTHON_OBJDIR) && make distclean)
+
+# fetch distfile for python
+$(DISTDIR)/$(PYTHON_DIST):
+	cd $(DISTDIR) && $(FETCH_CMD) $(PYTHON_URL)
+
+# retrieve python
+#
+$(PYTHON_OBJDIR)/.retrieved: $(DISTDIR)/$(PYTHON_DIST)
+	[ -d $(PYTHON_OBJDIR) ] || mkdir -p $(PYTHON_OBJDIR)
+	tar -C $(SRCDIR) -zxf $(DISTDIR)/$(PYTHON_DIST)
+	# Make setup.py use our own dependencies instead of system ones
+	sed -e "s#sqlite_inc_paths = \[ '/usr/include',#sqlite_inc_paths = [ '$(PREFIX)/sqlite/include',#" \
+		-e "s#'/usr/include/db4'#'$(PREFIX)/bdb/include'#" \
+		-e "s|\(add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')\)|#\1|" \
+		-e "s|\(add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')\)|#\1|" \
+		-e "s#find_library_file(lib_dirs, 'bz2'#find_library_file(['$(PREFIX)/bz2/lib'] + lib_dirs, 'bz2'#" \
+		< $(PYTHON_SRCDIR)/setup.py \
+		> $(PYTHON_SRCDIR)/setup.py.patched
+	mv $(PYTHON_SRCDIR)/setup.py.patched $(PYTHON_SRCDIR)/setup.py
+	chmod +x $(PYTHON_SRCDIR)/setup.py
+	# Fixes shared library linking on OpenBSD
+	# http://bugs.python.org/issue12560
+	sed -e '4930s#NetBSD\*|#NetBSD*|OpenBSD*|#' \
+		< $(PYTHON_SRCDIR)/configure \
+		> $(PYTHON_SRCDIR)/configure.patched
+	mv $(PYTHON_SRCDIR)/configure.patched $(PYTHON_SRCDIR)/configure
+	chmod +x $(PYTHON_SRCDIR)/configure
+	touch $@
+
+# configure python
+ifdef PROFILE
+PYTHON_PROFILING=--enable-profiling
+endif
+$(PYTHON_OBJDIR)/.configured: $(PYTHON_OBJDIR)/.retrieved
+	cd $(PYTHON_OBJDIR) \
+		&& env CFLAGS="-g $(PROFILE_CFLAGS)" GREP="`which grep`" \
+		CPPFLAGS="-I$(PREFIX)/bz2/include" \
+		LDFLAGS="-Wl,-rpath=$(PREFIX)/python/lib -L$(PREFIX)/bz2/lib" \
+		$(PYTHON_SRCDIR)/configure \
+		--prefix=$(PREFIX)/python \
+		--enable-shared \
+		--with-system-expat \
+		--with-dbmliborder=bdb \
+		$(PYTHON_PROFILING)
+	touch $@
+
+# compile python
+$(PYTHON_OBJDIR)/.compiled: $(PYTHON_OBJDIR)/.configured
+	(cd $(PYTHON_OBJDIR) && make)
+	touch $@
+
+# install python
+$(PYTHON_OBJDIR)/.installed: $(PYTHON_OBJDIR)/.compiled
+	(cd $(PYTHON_OBJDIR) && make install)
+	touch $@
+
 
 #######################################################################
 # svn
@@ -1006,8 +1188,9 @@ $(SVN_OBJDIR)/.configured: $(SVN_OBJDIR)
 	cd $(SVN_SRCDIR) && ./autogen.sh
 	cd $(svn_builddir) && \
 		env LDFLAGS="-L$(PREFIX)/neon/lib -L$(PREFIX)/apr/lib" \
-			LD_LIBRARY_PATH="$(PREFIX)/bdb/lib:$(PREFIX)/iconv/lib:$$LD_LIBRARY_PATH" \
+			LD_LIBRARY_PATH="$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH" \
 			GREP="`which grep`" \
+			PATH=$(PREFIX)/ruby/bin:$(PREFIX)/python/bin:$$PATH \
 			$(SVN_SRCDIR)/configure \
 			--enable-maintainer-mode \
 			--with-ssl \
@@ -1041,17 +1224,16 @@ $(SVN_OBJDIR)/.installed: $(SVN_OBJDIR)/
 	touch $@
 
 $(SVN_OBJDIR)/.bindings-compiled: $(SVN_OBJDIR)/.installed
-	if [ $(ENABLE_PYTHON_BINDINGS) = yes ]; then \
-		cd $(svn_builddir) \
-			&& make swig-py; \
-	fi
-	if [ $(ENABLE_RUBY_BINDINGS) = yes ]; then \
-		cd $(svn_builddir) \
-			&& make swig-rb; \
-	fi
+	cd $(svn_builddir) \
+		&& env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
+			make swig-py
+	cd $(svn_builddir) && \
+		env PATH=$(PREFIX)/ruby/bin:$$PATH \
+		LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) make swig-rb
 	if [ $(ENABLE_PERL_BINDINGS) = yes ]; then \
 		cd $(svn_builddir) \
-			&& make swig-pl; \
+			&& env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
+				make swig-pl; \
 	fi
 	if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \
 		cd $(svn_builddir) \
@@ -1060,14 +1242,12 @@ $(SVN_OBJDIR)/.bindings-compiled: $(SVN_
 	touch $@
 
 $(SVN_OBJDIR)/.bindings-installed: $(SVN_OBJDIR)/.bindings-compiled
-	if [ $(ENABLE_PYTHON_BINDINGS) = yes ]; then \
-		cd $(svn_builddir) \
-		  && make install-swig-py; \
-	fi
-	if [ $(ENABLE_RUBY_BINDINGS) = yes ]; then \
-		cd $(svn_builddir) \
-			&& make install-swig-rb; \
-	fi
+	cd $(svn_builddir) \
+	  && env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
+		make install-swig-py
+	cd $(svn_builddir) && \
+		env PATH=$(PREFIX)/ruby/bin:$$PATH \
+		LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) make install-swig-rb
 	if [ $(ENABLE_PERL_BINDINGS) = yes ]; then \
 		cd $(svn_builddir) \
 	    && make install-swig-pl-lib; \
@@ -1087,7 +1267,7 @@ HTTPD_CHECK_USERS=$(PREFIX)/httpd/conf/h
 HTTPD_CHECK_PORT=8081
 
 $(HTTPD_CHECK_USERS):
-	mkdir -p $(dirname $@)
+	mkdir -p $(dir $@)
 	echo > $@.tmp 'jrandom:xCGl35kV9oWCY'
 	echo >>$@.tmp 'jconstant:xCGl35kV9oWCY'
 	mv -f $@.tmp $@
@@ -1152,9 +1332,6 @@ endif
 	echo >>$@.tmp 'RedirectMatch ^/svn-test-work/repositories/REDIRECT-TEMP-(.*)$$ /svn-test-work/repositories/$$1'
 	mv -f $@.tmp $@
 
-# We need this to make sure some targets below pick up the right libraries
-LD_LIBRARY_PATH=$(PREFIX)/apr/lib:$(PREFIX)/iconv/lib:$(PREFIX)/bdb/lib:$(PREFIX)/neon/lib:$(PREFIX)/serf/lib:$(PREFIX)/sqlite/lib:$(PREFIX)/cyrus-sasl/lib:$(PREFIX)/iconv/lib:$(PREFIX)/libmagic/lib:$(PREFIX)/svn-$(WC)/lib
-
 .PHONY: libpath
 libpath:
 	@echo export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$$LD_LIBRARY_PATH
@@ -1167,7 +1344,11 @@ HTTPD_START_CMD = $(HTTPD_CMD) -k start
 HTTPD_START_CMD_DEBUG = $(HTTPD_START_CMD) -X
 HTTPD_STOP_CMD = $(HTTPD_CMD) -k stop; sleep 3
 
-SVNSERVE_START_CMD = $(SVN_PREFIX)/bin/svnserve \
+SVNSERVE_START_CMD = (ls $(PWD)/svnserve-*.pid | while read pidfile; do \
+				kill `cat "$$pidfile"`; sleep 3; \
+				rm -f $$pidfile; \
+			done); \
+			$(SVN_PREFIX)/bin/svnserve \
 			--listen-host 127.0.0.1 \
 			--pid-file $(PWD)/svnserve-$(WC).pid \
 			-d -r $(svn_builddir)/subversion/tests/cmdline
@@ -1195,10 +1376,6 @@ stop-httpd:
 	$(HTTPD_STOP_CMD)
 
 start-svnserve: $(SVN_OBJDIR)/.compiled
-	-ls $(PWD)/svnserve-*.pid | while read pidfile; do \
-		kill `cat "$$pidfile"`; sleep 3; \
-		rm -f $$pidfile; \
-	done
 	$(SVNSERVE_START_CMD)
 
 stop-svnserve:
@@ -1208,7 +1385,8 @@ define do_check
 -cd $(svn_builddir) && for fs in fsfs bdb; do \
     echo "Begin test: $(subst svn-check-,,$@) x $$fs"; \
     test -d "$(RAMDISK)/tmp" && export TMPDIR="$(RAMDISK)/tmp"; \
-    make check PARALLEL=$(PARALLEL) CLEANUP=$(CLEANUP) $1 FS_TYPE=$$fs; \
+    env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
+        make check PARALLEL=$(PARALLEL) CLEANUP=$(CLEANUP) $1 FS_TYPE=$$fs; \
     for log in tests.log fails.log; do \
         test -f $$log && mv -f $$log $$log.$@-$$fs; \
     done; \
@@ -1262,24 +1440,21 @@ svn-check-swig-pl:
 	fi
 
 svn-check-swig-py:
-	-if [ $(ENABLE_PYTHON_BINDINGS) = yes ]; then \
-		(cd $(svn_builddir) && \
-			env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
-			make check-swig-py 2>&1) | \
-				tee $(svn_builddir)/tests.log.bindings.py; \
-	fi
+	-(cd $(svn_builddir) && \
+		env LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
+		make check-swig-py 2>&1) | \
+			tee $(svn_builddir)/tests.log.bindings.py
 
 # We add the svn prefix to PATH here because the ruby tests
 # attempt to start an svnserve binary found in PATH.
 svn-check-swig-rb:
-	-if [ $(ENABLE_RUBY_BINDINGS) = yes ]; then \
-		(cd $(svn_builddir)/subversion/bindings/swig/ruby/test && \
-			env RUBYLIB=$(RUBYLIB) \
-			LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
-			PATH=$(SVN_PREFIX)/bin:$$PATH \
-			ruby run-test.rb --verbose=normal 2>&1) | \
-				tee $(svn_builddir)/tests.log.bindings.rb; \
-	fi
+	(cd $(svn_builddir)/subversion/bindings/swig/ruby/test && \
+		env RUBYLIB=$(RUBYLIB) \
+		LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) \
+		PATH=$(SVN_PREFIX)/bin:$$PATH \
+		$(PREFIX)/ruby/bin/ruby run-test.rb \
+			--verbose=verbose 2>&1) | \
+			tee $(svn_builddir)/tests.log.bindings.rb
 
 svn-check-javahl:
 	-if [ $(ENABLE_JAVA_BINDINGS) = yes ]; then \
@@ -1322,9 +1497,9 @@ endif
 	@echo "sqlite:     $(SQLITE_VER)"
 	@echo "openssl:    `openssl version | cut -d' ' -f2`"
 	@echo "swig:       `swig -version | grep Version | cut -d' ' -f3`"
-	@echo "python:     `python --version 2>&1 | cut -d' ' -f2`"
+	@echo "python:     $(PYTHON_VER)"
 	@echo "perl:       `eval \`perl -V:version\`; echo $$version`"
-	@echo "ruby:       `ruby --version | cut -d' ' -f2`"
+	@echo "ruby:       $(RUBY_VER)"
 ifeq ($(ENABLE_JAVA_BINDINGS),yes)
 	@echo "java:       `java -version 2>&1 | grep version | cut -d' ' -f3  | sed -e 's/\"//g'`"
 endif

Propchange: subversion/branches/svn-bisect/tools/dev/wc-format.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dev/wc-ng/bump-to-19.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dev/wc-ng/count-progress.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dev/wc-ng/graph-data.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dev/wc-ng/populate-pristine.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/svn-bisect/tools/dev/which-error.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/dev/which-error.py?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/dev/which-error.py (original)
+++ subversion/branches/svn-bisect/tools/dev/which-error.py Wed Jul 20 13:06:00 2011
@@ -113,6 +113,7 @@ if __name__ == "__main__":
   else:
     for code in sys.argv[1:]:
       try:
+        code = code.lstrip('EW')
         codes.append(int(code))
       except ValueError:
         usage_and_exit()

Modified: subversion/branches/svn-bisect/tools/dev/windows-build/document-version.pl
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/dev/windows-build/document-version.pl?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/dev/windows-build/document-version.pl (original)
+++ subversion/branches/svn-bisect/tools/dev/windows-build/document-version.pl Wed Jul 20 13:06:00 2011
@@ -1,48 +1,48 @@
-#!/usr/local/bin/perl -w
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-use strict;
-
-use Tie::File;
-#use Cwd 'getcwd';
-
-die "Bad args '@ARGV'" unless (@ARGV >= 3  && @ARGV <= 4);
-
-my ($filename, $TARGETDIR, $SVNDIR, $BUILDDESCR) = (@ARGV, "");
-
-my (@file, $version, $lines);
-
-tie (@file, 'Tie::File', $filename)
-	or die $!;
-
-$version  =  `svnversion -n` or die;
-$version  =~ tr/M//d;
-$version .=  '-' . $BUILDDESCR if $BUILDDESCR;
-
-/^#define SVN_VER_TAG/ and s/(?<=dev build).*(?=\)"$)/-r$version/
-	for @file;
-/^#define SVN_VER_NUMTAG/ and s/(?<=-dev).*(?="$)/-r$version/
-	for @file;
-
-mkdir $TARGETDIR unless -d $TARGETDIR;
-
-chdir $SVNDIR;
-system "svn diff -x-p > $TARGETDIR\\$version.diff"
-	and die $!;
-
+#!/usr/local/bin/perl -w
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+use strict;
+
+use Tie::File;
+#use Cwd 'getcwd';
+
+die "Bad args '@ARGV'" unless (@ARGV >= 3  && @ARGV <= 4);
+
+my ($filename, $TARGETDIR, $SVNDIR, $BUILDDESCR) = (@ARGV, "");
+
+my (@file, $version, $lines);
+
+tie (@file, 'Tie::File', $filename)
+	or die $!;
+
+$version  =  `svnversion -n` or die;
+$version  =~ tr/M//d;
+$version .=  '-' . $BUILDDESCR if $BUILDDESCR;
+
+/^#define SVN_VER_TAG/ and s/(?<=dev build).*(?=\)"$)/-r$version/
+	for @file;
+/^#define SVN_VER_NUMTAG/ and s/(?<=-dev).*(?="$)/-r$version/
+	for @file;
+
+mkdir $TARGETDIR unless -d $TARGETDIR;
+
+chdir $SVNDIR;
+system "svn diff -x-p > $TARGETDIR\\$version.diff"
+	and die $!;
+

Propchange: subversion/branches/svn-bisect/tools/dev/windows-build/document-version.pl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn-bisect/tools/dist/backport.pl
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/svn-bisect/tools/dist/collect_sigs.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/dist/collect_sigs.py?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/dist/collect_sigs.py (original)
+++ subversion/branches/svn-bisect/tools/dist/collect_sigs.py Wed Jul 20 13:06:00 2011
@@ -78,7 +78,7 @@ def generate_asc_files(target_dir='.'):
   curs.execute('SELECT filename, signature FROM signatures;')
   for filename, signature in curs:
     fd = _open(filename)
-    fd.write(signature + "\n")
+    fd.write(signature)
 
   for fd in fds.values():
     fd.flush()
@@ -181,8 +181,11 @@ def list_signatures():
 
   lines = ""
   curs = db.cursor()
+  like_filename = 'subversion-%s%%' % config.version
   curs.execute('''SELECT filename, COUNT(*) FROM signatures
-                  GROUP BY filename ORDER BY filename''')
+                  WHERE filename LIKE ?
+                  GROUP BY filename ORDER BY filename''',
+               (like_filename, ) )
   for filename, count in curs:
     lines += '<a href="%s/%s.asc">%s.asc</a>: %d signature%s<br/>\n' \
              % (os.getenv('SCRIPT_NAME'), filename, filename,
@@ -196,6 +199,24 @@ def save_valid_sig(db, filename, keyid, 
 
   generate_asc_files(config.sigdir)
 
+  # Attempt to copy the results to a remote location
+  try:
+    import paramiko
+
+    client = paramiko.SSHClient()
+    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+    client.connect(config.ssh['host'], username = config.ssh['user'],
+                   key_filename = config.ssh['key'])
+    sftp = client.open_sftp()
+
+    sftp.put(os.path.join(config.sigdir, filename + '.asc'),
+             os.path.join(config.ssh['dir'], config.version, 'deploy',
+                          filename + '.asc'))
+    client.close()
+  except:
+    # Ignore any errors
+    pass
+
 def verify_sig_for_file(signature, filename):
   args = ['gpg', '--logger-fd', '1', '--no-tty',
           '--status-fd', '2', '--verify', '-',

Modified: subversion/branches/svn-bisect/tools/dist/release.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/dist/release.py?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/dist/release.py (original)
+++ subversion/branches/svn-bisect/tools/dist/release.py Wed Jul 20 13:06:00 2011
@@ -36,13 +36,17 @@
 
 # Stuff we need
 import os
+import re
 import sys
+import glob
 import shutil
 import urllib2
 import hashlib
 import tarfile
 import logging
 import datetime
+import operator
+import itertools
 import subprocess
 import argparse       # standard in Python 2.7
 
@@ -64,11 +68,87 @@ swig_ver = '2.0.4'
 
 # Some constants
 repos = 'http://svn.apache.org/repos/asf/subversion'
+people_host = 'minotaur.apache.org'
+people_dist_dir = '/www/www.apache.org/dist/subversion'
 
 
 #----------------------------------------------------------------------
 # Utility functions
 
+class Version(object):
+    regex = re.compile('(\d+).(\d+).(\d+)(?:-(?:(rc|alpha|beta)(\d+)))?')
+
+    def __init__(self, ver_str):
+        # Special case the 'trunk-nightly' version
+        if ver_str == 'trunk-nightly':
+            self.major = None
+            self.minor = None
+            self.patch = None
+            self.pre = 'nightly'
+            self.pre_num = None
+            self.base = 'nightly'
+            return
+
+        match = self.regex.search(ver_str)
+
+        if not match:
+            raise RuntimeError("Bad version string '%s'" % ver_str)
+
+        self.major = int(match.group(1))
+        self.minor = int(match.group(2))
+        self.patch = int(match.group(3))
+
+        if match.group(4):
+            self.pre = match.group(4)
+            self.pre_num = int(match.group(5))
+        else:
+            self.pre = None
+            self.pre_num = None
+
+        self.base = '%d.%d.%d' % (self.major, self.minor, self.patch)
+
+    def is_prerelease(self):
+        return self.pre != None
+
+    def __lt__(self, that):
+        if self.major < that.major: return True
+        if self.major > that.major: return False
+
+        if self.minor < that.minor: return True
+        if self.minor > that.minor: return False
+
+        if self.patch < that.patch: return True
+        if self.patch > that.patch: return False
+
+        if not self.pre and not that.pre: return False
+        if not self.pre and that.pre: return False
+        if self.pre and not that.pre: return True
+
+        # We are both pre-releases
+        if self.pre != that.pre:
+            return self.pre < that.pre
+        else:
+            return self.pre_num < that.pre_num
+
+    def __str(self):
+        if self.pre:
+            if self.pre == 'nightly':
+                return 'nightly'
+            else:
+                extra = '-%s%d' % (self.pre, self.pre_num)
+        else:
+            extra = ''
+
+        return self.base + extra
+
+    def __repr__(self):
+
+        return "Version('%s')" % self.__str()
+
+    def __str__(self):
+        return self.__str()
+
+
 def get_prefix(base_dir):
     return os.path.join(base_dir, 'prefix')
 
@@ -108,16 +188,20 @@ def download_file(url, target):
     target_file = open(target, 'w')
     target_file.write(response.read())
 
+def assert_people():
+    if os.uname()[1] != people_host:
+        raise RuntimeError('Not running on expected host "%s"' % people_host)
+
 #----------------------------------------------------------------------
 # Cleaning up the environment
 
-def cleanup(base_dir, args):
+def cleanup(args):
     'Remove generated files and folders.'
     logging.info('Cleaning')
 
-    shutil.rmtree(get_prefix(base_dir), True)
-    shutil.rmtree(get_tempdir(base_dir), True)
-    shutil.rmtree(get_deploydir(base_dir), True)
+    shutil.rmtree(get_prefix(args.base_dir), True)
+    shutil.rmtree(get_tempdir(args.base_dir), True)
+    shutil.rmtree(get_deploydir(args.base_dir), True)
 
 
 #----------------------------------------------------------------------
@@ -230,20 +314,21 @@ class SwigDep(RollDep):
         return self.have_usable()
 
 
-def build_env(base_dir, args):
+def build_env(args):
     'Download prerequisites for a release and prepare the environment.'
     logging.info('Creating release environment')
 
     try:
-        os.mkdir(get_prefix(base_dir))
-        os.mkdir(get_tempdir(base_dir))
+        os.mkdir(get_prefix(args.base_dir))
+        os.mkdir(get_tempdir(args.base_dir))
     except OSError:
         if not args.use_existing:
             raise
 
-    autoconf = AutoconfDep(base_dir, args.use_existing, args.verbose)
-    libtool = LibtoolDep(base_dir, args.use_existing, args.verbose)
-    swig = SwigDep(base_dir, args.use_existing, args.verbose, args.sf_mirror)
+    autoconf = AutoconfDep(args.base_dir, args.use_existing, args.verbose)
+    libtool = LibtoolDep(args.base_dir, args.use_existing, args.verbose)
+    swig = SwigDep(args.base_dir, args.use_existing, args.verbose,
+                   args.sf_mirror)
 
     # iterate over our rolling deps, and build them if needed
     for dep in [autoconf, libtool, swig]:
@@ -256,24 +341,22 @@ def build_env(base_dir, args):
 #----------------------------------------------------------------------
 # Create release artifacts
 
-def roll_tarballs(base_dir, args):
+def roll_tarballs(args):
     'Create the release artifacts.'
     extns = ['zip', 'tar.gz', 'tar.bz2']
-    version_base = args.version.split('-')[0]
-    version_extra = args.version.split('-')[1]
 
     if args.branch:
         branch = args.branch
     else:
-        branch = version_base[:-1] + 'x'
+        branch = 'branches/' + args.version.base[:-1] + 'x'
 
     logging.info('Rolling release %s from branch %s@%d' % (args.version,
                                                            branch, args.revnum))
 
     # Ensure we've got the appropriate rolling dependencies available
-    autoconf = AutoconfDep(base_dir, False, args.verbose)
-    libtool = LibtoolDep(base_dir, False, args.verbose)
-    swig = SwigDep(base_dir, False, args.verbose, None)
+    autoconf = AutoconfDep(args.base_dir, False, args.verbose)
+    libtool = LibtoolDep(args.base_dir, False, args.verbose)
+    swig = SwigDep(args.base_dir, False, args.verbose, None)
 
     for dep in [autoconf, libtool, swig]:
         if not dep.have_usable():
@@ -282,7 +365,7 @@ def roll_tarballs(base_dir, args):
     # Make sure CHANGES is sync'd
     if branch != 'trunk':
         trunk_CHANGES = '%s/trunk/CHANGES@%d' % (repos, args.revnum)
-        branch_CHANGES = '%s/branches/%s/CHANGES@%d' % (repos, branch,
+        branch_CHANGES = '%s/%s/CHANGES@%d' % (repos, branch,
                                                         args.revnum)
         proc = subprocess.Popen(['svn', 'diff', '--summarize', branch_CHANGES,
                                    trunk_CHANGES],
@@ -295,44 +378,40 @@ def roll_tarballs(base_dir, args):
             raise RuntimeError('CHANGES not synced between trunk and branch')
 
     # Create the output directory
-    if not os.path.exists(get_deploydir(base_dir)):
-        os.mkdir(get_deploydir(base_dir))
+    if not os.path.exists(get_deploydir(args.base_dir)):
+        os.mkdir(get_deploydir(args.base_dir))
 
     # For now, just delegate to dist.sh to create the actual artifacts
     extra_args = ''
-    if version_extra:
-        if version_extra.startswith('alpha'):
-            extra_args = '-alpha %s' % version_extra[5:]
-        elif version_extra.startswith('beta'):
-            extra_args = '-beta %s' % version_extra[4:]
-        elif version_extra.startswith('rc'):
-            extra_args = '-rc %s' % version_extra[2:]
-        elif version_extra.startswith('nightly'):
+    if args.version.is_prerelease():
+        if args.version.pre == 'nightly':
             extra_args = '-nightly'
+        else:
+            extra_args = '-%s %d' % (args.version.pre, args.version.pre_num)
     logging.info('Building UNIX tarballs')
     run_script(args.verbose, '%s/dist.sh -v %s -pr %s -r %d %s'
-                     % (sys.path[0], version_base, branch, args.revnum,
+                     % (sys.path[0], args.version.base, branch, args.revnum,
                         extra_args) )
     logging.info('Buildling Windows tarballs')
     run_script(args.verbose, '%s/dist.sh -v %s -pr %s -r %d -zip %s'
-                     % (sys.path[0], version_base, branch, args.revnum,
+                     % (sys.path[0], args.version.base, branch, args.revnum,
                         extra_args) )
 
     # Move the results to the deploy directory
     logging.info('Moving artifacts and calculating checksums')
     for e in extns:
-        if version_extra and version_extra.startswith('nightly'):
+        if args.version.pre == 'nightly':
             filename = 'subversion-trunk.%s' % e
         else:
             filename = 'subversion-%s.%s' % (args.version, e)
 
-        shutil.move(filename, get_deploydir(base_dir))
-        filename = os.path.join(get_deploydir(base_dir), filename)
+        shutil.move(filename, get_deploydir(args.base_dir))
+        filename = os.path.join(get_deploydir(args.base_dir), filename)
         m = hashlib.sha1()
         m.update(open(filename, 'r').read())
         open(filename + '.sha1', 'w').write(m.hexdigest())
 
-    shutil.move('svn_version.h.dist', get_deploydir(base_dir))
+    shutil.move('svn_version.h.dist', get_deploydir(args.base_dir))
 
     # And we're done!
 
@@ -340,16 +419,13 @@ def roll_tarballs(base_dir, args):
 #----------------------------------------------------------------------
 # Post the candidate release artifacts
 
-def post_candidates(base_dir, args):
+def post_candidates(args):
     'Post the generated tarballs to web-accessible directory.'
-    version_base = args.version.split('-')[0]
-    version_extra = args.version.split('-')[1]
-
     if args.target:
         target = args.target
     else:
         target = os.path.join(os.getenv('HOME'), 'public_html', 'svn',
-                              args.version)
+                              str(args.version))
 
     if args.code_name:
         dirname = args.code_name
@@ -359,14 +435,14 @@ def post_candidates(base_dir, args):
     if not os.path.exists(target):
         os.makedirs(target)
 
-    data = { 'version'      : args.version,
+    data = { 'version'      : str(args.version),
              'revnum'       : args.revnum,
              'dirname'      : dirname,
            }
 
     # Choose the right template text
-    if version_extra:
-        if version_extra.startswith('nightly'):
+    if args.version.is_prerelease():
+        if args.version.pre == 'nightly':
             template_filename = 'nightly-candidates.ezt'
         else:
             template_filename = 'rc-candidates.ezt'
@@ -380,26 +456,53 @@ def post_candidates(base_dir, args):
     logging.info('Moving tarballs to %s' % os.path.join(target, dirname))
     if os.path.exists(os.path.join(target, dirname)):
         shutil.rmtree(os.path.join(target, dirname))
-    shutil.copytree(get_deploydir(base_dir), os.path.join(target, dirname))
+    shutil.copytree(get_deploydir(args.base_dir), os.path.join(target, dirname))
+
+
+#----------------------------------------------------------------------
+# Clean dist
+
+def clean_dist(args):
+    'Clean the distribution directory of all but the most recent artifacts.'
+
+    regex = re.compile('subversion-(\d+).(\d+).(\d+)(?:-(?:(rc|alpha|beta)(\d+)))?')
+
+    if not args.dist_dir:
+        assert_people()
+        args.dist_dir = people_dist_dir
+
+    logging.info('Cleaning dist dir \'%s\'' % args.dist_dir)
+
+    filenames = glob.glob(os.path.join(args.dist_dir, 'subversion-*.tar.gz'))
+    versions = []
+    for filename in filenames:
+        versions.append(Version(filename))
+
+    for k, g in itertools.groupby(sorted(versions),
+                                  lambda x: (x.major, x.minor)):
+        releases = list(g)
+        logging.info("Saving release '%s'", releases[-1])
+
+        for r in releases[:-1]:
+            for filename in glob.glob(os.path.join(args.dist_dir,
+                                                   'subversion-%s.*' % r)):
+                logging.info("Removing '%s'" % filename)
+                os.remove(filename)
 
 
 #----------------------------------------------------------------------
 # Write announcements
 
-def write_news(base_dir, args):
+def write_news(args):
     'Write text for the Subversion website.'
-    version_base = args.version.split('-')[0]
-    version_extra = args.version.split('-')[1]
-
     data = { 'date' : datetime.date.today().strftime('%Y%m%d'),
              'date_pres' : datetime.date.today().strftime('%Y-%m-%d'),
-             'version' : args.version,
-             'version_base' : version_base[0:3],
+             'version' : str(args.version),
+             'version_base' : args.version.base,
            }
 
-    if version_extra:
-        if version_extra.startswith('alpha'):
-            template_filename = 'rc-news.ezt'
+    if args.version.is_prerelease():
+        template_filename = 'rc-news.ezt'
     else:
         template_filename = 'stable-news.ezt'
 
@@ -408,8 +511,42 @@ def write_news(base_dir, args):
     template.generate(sys.stdout, data)
 
 
-def announce(base_dir, args):
+def get_sha1info(args):
+    'Return a list of sha1 info for the release'
+    sha1s = glob.glob(os.path.join(get_deploydir(args.base_dir), '*.sha1'))
+
+    class info(object):
+        pass
+
+    sha1info = []
+    for s in sha1s:
+        i = info()
+        i.filename = os.path.basename(s)[:-5]
+        i.sha1 = open(s, 'r').read()
+        sha1info.append(i)
+
+    return sha1info
+
+
+def write_announcement(args):
     'Write the release announcement.'
+    sha1info = get_sha1info(args)
+
+    data = { 'version'              : str(args.version),
+             'sha1info'             : sha1info,
+             'siginfo'              : open('getsigs-output', 'r').read(),
+             'major-minor'          : args.version.base[:3],
+             'major-minor-patch'    : args.version.base,
+           }
+
+    if args.version.is_prerelease():
+        template_filename = 'rc-release-ann.ezt'
+    else:
+        template_filename = 'stable-release-ann.ezt'
+
+    template = ezt.Template(compress_whitespace = False)
+    template.parse(get_tmplfile(template_filename).read())
+    template.generate(sys.stdout, data)
 
 
 #----------------------------------------------------------------------
@@ -448,7 +585,7 @@ def main():
     subparser = subparsers.add_parser('roll',
                     help='''Create the release artifacts.''')
     subparser.set_defaults(func=roll_tarballs)
-    subparser.add_argument('version',
+    subparser.add_argument('version', type=Version,
                     help='''The release label, such as '1.7.0-alpha1'.''')
     subparser.add_argument('revnum', type=int,
                     help='''The revision number to base the release on.''')
@@ -461,7 +598,7 @@ def main():
                             The default location is somewhere in ~/public_html.
                             ''')
     subparser.set_defaults(func=post_candidates)
-    subparser.add_argument('version',
+    subparser.add_argument('version', type=Version,
                     help='''The release label, such as '1.7.0-alpha1'.''')
     subparser.add_argument('revnum', type=int,
                     help='''The revision number to base the release on.''')
@@ -471,12 +608,29 @@ def main():
                     help='''A whimsical name for the release, used only for
                             naming the download directory.''')
 
+    # The clean-dist subcommand
+    subparser = subparsers.add_parser('clean-dist',
+                    help='''Clean the distribution directory (and mirrors) of
+                            all but the most recent MAJOR.MINOR release.  If no
+                            dist-dir is given, this command will assume it is
+                            running on people.apache.org.''')
+    subparser.set_defaults(func=clean_dist)
+    subparser.add_argument('--dist-dir',
+                    help='''The directory to clean.''')
+
     # The write-news subcommand
     subparser = subparsers.add_parser('write-news',
                     help='''Output to stdout template text for use in the news
                             section of the Subversion website.''')
     subparser.set_defaults(func=write_news)
-    subparser.add_argument('version',
+    subparser.add_argument('version', type=Version,
+                    help='''The release label, such as '1.7.0-alpha1'.''')
+
+    subparser = subparsers.add_parser('write-announcement',
+                    help='''Output to stdout template text for the emailed
+                            release announcement.''')
+    subparser.set_defaults(func=write_announcement)
+    subparser.add_argument('version', type=Version,
                     help='''The release label, such as '1.7.0-alpha1'.''')
 
     # A meta-target
@@ -490,7 +644,7 @@ def main():
 
     # first, process any global operations
     if args.clean:
-        cleanup(args.base_dir, args)
+        cleanup(args)
 
     # Set up logging
     logger = logging.getLogger()
@@ -504,7 +658,7 @@ def main():
                                                             + os.environ['PATH']
 
     # finally, run the subcommand, and give it the parsed arguments
-    args.func(args.base_dir, args)
+    args.func(args)
 
 
 if __name__ == '__main__':

Propchange: subversion/branches/svn-bisect/tools/dist/release.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/svn-bisect/tools/hook-scripts/svnperms.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/hook-scripts/svnperms.py?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/hook-scripts/svnperms.py (original)
+++ subversion/branches/svn-bisect/tools/hook-scripts/svnperms.py Wed Jul 20 13:06:00 2011
@@ -285,7 +285,7 @@ Options:
     -s NAME    Use section NAME as permission section (default is
                repository name, extracted from repository path)
     -R REV     Query revision REV for commit information (for tests)
-    -A AUTHOR  Check commit as if AUTHOR had commited it (for tests)
+    -A AUTHOR  Check commit as if AUTHOR had committed it (for tests)
     -h         Show this message
 """
 

Propchange: subversion/branches/svn-bisect/tools/hook-scripts/validate-extensions.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/svn-bisect/tools/server-side/svn-populate-node-origins-index.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/server-side/svn-populate-node-origins-index.c?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/server-side/svn-populate-node-origins-index.c (original)
+++ subversion/branches/svn-bisect/tools/server-side/svn-populate-node-origins-index.c Wed Jul 20 13:06:00 2011
@@ -122,7 +122,7 @@ build_index(const char *repos_path, apr_
   apr_pool_t *subpool;
 
   /* Open the repository. */
-  SVN_ERR(svn_repos_open(&repos, repos_path, pool));
+  SVN_ERR(svn_repos_open2(&repos, repos_path, NULL, pool));
 
   /* Get a filesystem object. */
   fs = svn_repos_fs(repos);

Modified: subversion/branches/svn-bisect/tools/server-side/svn-rep-sharing-stats.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/tools/server-side/svn-rep-sharing-stats.c?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/tools/server-side/svn-rep-sharing-stats.c (original)
+++ subversion/branches/svn-bisect/tools/server-side/svn-rep-sharing-stats.c Wed Jul 20 13:06:00 2011
@@ -390,7 +390,7 @@ static svn_error_t *process(const char *
     both_reps = apr_hash_make(scratch_pool);
 
   /* Open the FS. */
-  SVN_ERR(svn_repos_open(&repos, repos_path, scratch_pool));
+  SVN_ERR(svn_repos_open2(&repos, repos_path, NULL, scratch_pool));
   fs = svn_repos_fs(repos);
 
   SVN_ERR(is_fs_fsfs(fs, scratch_pool));

Modified: subversion/branches/svn-bisect/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/win-tests.py?rev=1148749&r1=1148748&r2=1148749&view=diff
==============================================================================
--- subversion/branches/svn-bisect/win-tests.py (original)
+++ subversion/branches/svn-bisect/win-tests.py Wed Jul 20 13:06:00 2011
@@ -79,6 +79,7 @@ def _usage_exit():
   print("  --http-library         : dav library to use, neon (default) or serf")
   print("  --http-short-circuit   : Use SVNPathAuthz short_circuit on HTTP server")
   print("  --disable-http-v2      : Do not advertise support for HTTPv2 on server")
+  print("  --disable-bulk-updates : Disable bulk updates on HTTP server")
   print("  --javahl               : Run the javahl tests instead of the normal tests")
   print("  --list                 : print test doc strings only")
   print("  --milestone-filter=RE  : RE is a regular expression pattern that (when")
@@ -126,7 +127,7 @@ opts, args = my_getopt(sys.argv[1:], 'hr
                         'test=', 'url=', 'svnserve-args=', 'fs-type=', 'asp.net-hack',
                         'httpd-dir=', 'httpd-port=', 'httpd-daemon',
                         'httpd-server', 'http-library=', 'http-short-circuit',
-                        'disable-http-v2', 'help',
+                        'disable-http-v2', 'disable-bulk-updates', 'help',
                         'fsfs-packing', 'fsfs-sharding=', 'javahl',
                         'list', 'enable-sasl', 'bin=', 'parallel',
                         'config-file=', 'server-minor-version=',
@@ -148,6 +149,7 @@ httpd_service = None
 http_library = 'neon'
 http_short_circuit = False
 advertise_httpv2 = True
+http_bulk_updates = True
 list_tests = None
 milestone_filter = None
 test_javahl = None
@@ -199,8 +201,10 @@ for opt, val in opts:
     http_library = val
   elif opt == '--http-short-circuit':
     http_short_circuit = True
-  elif opt == 'disable-http-v2':
+  elif opt == '--disable-http-v2':
     advertise_httpv2 = False
+  elif opt == '--disable-bulk-updates':
+    http_bulk_updates = False
   elif opt == '--fsfs-sharding':
     fsfs_sharding = int(val)
   elif opt == '--fsfs-packing':
@@ -424,7 +428,7 @@ class Svnserve:
 class Httpd:
   "Run httpd for DAV tests"
   def __init__(self, abs_httpd_dir, abs_objdir, abs_builddir, httpd_port,
-               service, httpv2, short_circuit):
+               service, httpv2, short_circuit, bulk_updates):
     self.name = 'apache.exe'
     self.httpd_port = httpd_port
     self.httpd_dir = abs_httpd_dir
@@ -434,6 +438,11 @@ class Httpd:
     else:
       self.httpv2_option = 'off'
 
+    if bulk_updates:
+      self.bulkupdates_option = 'on'
+    else:
+      self.bulkupdates_option = 'off'
+
     self.service = service
     self.proc_handle = None
     self.path = os.path.join(self.httpd_dir, 'bin', self.name)
@@ -496,6 +505,9 @@ class Httpd:
     fp.write('ServerName   localhost\n')
     fp.write('PidFile      pid\n')
     fp.write('ErrorLog     log\n')
+    fp.write('LogFormat    "%h %l %u %t \\"%r\\" %>s %b" common\n')
+    fp.write('Customlog    log common\n')
+    fp.write('LogLevel     Debug\n')
     fp.write('Listen       ' + str(self.httpd_port) + '\n')
 
     # Write LoadModule for minimal system module
@@ -529,7 +541,6 @@ class Httpd:
              'REDIRECT-TEMP-(.*)$ /svn-test-work/repositories/$1\n')
 
     fp.write('TypesConfig     ' + self._quote(self.httpd_mime_types) + '\n')
-    fp.write('LogLevel        Debug\n')
     fp.write('HostNameLookups Off\n')
 
     fp.close()
@@ -576,6 +587,7 @@ class Httpd:
       '  SVNParentPath   ' + self._quote(path) + '\n' \
       '  SVNAdvertiseV2Protocol ' + self.httpv2_option + '\n' \
       '  SVNPathAuthz ' + self.path_authz_option + '\n' \
+      '  SVNAllowBulkUpdates ' + self.bulkupdates_option + '\n' \
       '  AuthzSVNAccessFile ' + self._quote(self.authz_file) + '\n' \
       '  AuthType        Basic\n' \
       '  AuthName        "Subversion Repository"\n' \
@@ -644,6 +656,8 @@ if create_dirs:
     baton = copied_execs
     for dirpath, dirs, files in os.walk('subversion'):
       copy_execs(baton, dirpath, dirs + files)
+    for dirpath, dirs, files in os.walk('tools/client-side/svnmucc'):
+      copy_execs(baton, dirpath, dirs + files)
   except:
     os.chdir(old_cwd)
     raise
@@ -666,7 +680,8 @@ if not list_tests:
 
   if run_httpd:
     daemon = Httpd(abs_httpd_dir, abs_objdir, abs_builddir, httpd_port,
-                   httpd_service, advertise_httpv2, http_short_circuit)
+                   httpd_service, advertise_httpv2, http_short_circuit,
+                   http_bulk_updates)
 
   # Start service daemon, if any
   if daemon:



Mime
View raw message