From owner-svn-ports-head@FreeBSD.ORG Sat Jul 13 15:36:52 2013 Return-Path: Delivered-To: svn-ports-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 46278B93; Sat, 13 Jul 2013 15:36:52 +0000 (UTC) (envelope-from lev@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 3618B170F; Sat, 13 Jul 2013 15:36:52 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r6DFaqCj074245; Sat, 13 Jul 2013 15:36:52 GMT (envelope-from lev@svn.freebsd.org) Received: (from lev@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r6DFapWK074240; Sat, 13 Jul 2013 15:36:51 GMT (envelope-from lev@svn.freebsd.org) Message-Id: <201307131536.r6DFapWK074240@svn.freebsd.org> From: "Lev A. Serebryakov" Date: Sat, 13 Jul 2013 15:36:51 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r322938 - in head/devel: subversion subversion-static subversion/files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jul 2013 15:36:52 -0000 Author: lev Date: Sat Jul 13 15:36:50 2013 New Revision: 322938 URL: http://svnweb.freebsd.org/changeset/ports/322938 Log: (1) Fix subversion-static port to use SERF. (2) Backport fix of issue #4383: problems with symbolic-link WC. (3) Backport change r1500762 (no isue # found): conflict between GPG Agent and other password stories. (4) Fix error message when Subversion is configured with BDB abd APR is not. PR: ports/179807, ports/180121, ports/180121 Submitted by: [3] eugen@grosbein.pp.ru Added: head/devel/subversion/files/patch-fix4383 (contents, props changed) head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c (contents, props changed) Modified: head/devel/subversion-static/Makefile head/devel/subversion/Makefile head/devel/subversion/Makefile.common Modified: head/devel/subversion-static/Makefile ============================================================================== --- head/devel/subversion-static/Makefile Sat Jul 13 15:33:23 2013 (r322937) +++ head/devel/subversion-static/Makefile Sat Jul 13 15:36:50 2013 (r322938) @@ -3,10 +3,10 @@ PKGNAMESUFFIX= -static CONFLICTS_INSTALL= ${PORTNAME}-[0-9]* -LATEST_LINK= ${PORTNAME}${PKGNAMESUFFIX} +LATEST_LINK= ${PORTNAME}${PKGNAMESUFFIX} OPTIONS_EXCLUDE= ${OPTIONS_DEFINE} -OPTIONS_SLAVE= NEON STATIC FREEBSD_TEMPLATE ENHANCED_KEYWORD +OPTIONS_SLAVE= FREEBSD_TEMPLATE P4_STYLE_MARKERS SERF STATIC MASTERDIR= ${.CURDIR}/../subversion PKGMESSAGE= ${.CURDIR}/pkg-message Modified: head/devel/subversion/Makefile ============================================================================== --- head/devel/subversion/Makefile Sat Jul 13 15:33:23 2013 (r322937) +++ head/devel/subversion/Makefile Sat Jul 13 15:36:50 2013 (r322938) @@ -15,9 +15,10 @@ MAN8= svnserve.8 TXT_DOCS= BUGS CHANGES COMMITTERS INSTALL README -OPTIONS_DEFINE= BDB BOOK GNOME_KEYRING KDE_KWALLET MAINTAINER_DEBUG \ - MOD_DAV_SVN P4_STYLE_MARKERS FREEBSD_TEMPLATE SASL \ - SERF STATIC SVNSERVE_WRAPPER TEST TOOLS \ +OPTIONS_DEFINE= BDB BOOK DOCS GNOME_KEYRING KDE_KWALLET \ + MAINTAINER_DEBUG MOD_DAV_SVN NLS P4_STYLE_MARKERS \ + FREEBSD_TEMPLATE SASL SERF STATIC SVNSERVE_WRAPPER \ + TEST TOOLS OPTIONS_DEFAULT=P4_STYLE_MARKERS FREEBSD_TEMPLATE SERF @@ -212,8 +213,8 @@ pre-configure: @BDB_VERSION=`${APR_APU_DIR}/${APU_CONFIG} --db-version`; \ if [ "$${BDB_VERSION}" != "4" -a "$${BDB_VERSION}" != "5" ] ; then \ ${ECHO_MSG} "" ; \ - ${ECHO_MSG} 'You should build `'"${APR_PORT}' with Berkeley DB (4 or 5) support to use subversion with it." ; \ - ${ECHO_MSG} 'Please rebuild `'"${APR_PORT}' with option "'`'"${OPT_NAME}' and try again." ; \ + ${ECHO_MSG} 'You should build `'"devel/apr1' with Berkeley DB (4 or 5) support to use subversion with it." ; \ + ${ECHO_MSG} 'Please rebuild `'"devel/apr1' with option "'`'"${OPT_NAME}' and try again." ; \ ${ECHO_MSG} "" ; \ ${ECHO_MSG} "Or you can disable Berkeley DB support. Only 'fs' repository backend will be available." ; \ ${ECHO_MSG} "" ; \ Modified: head/devel/subversion/Makefile.common ============================================================================== --- head/devel/subversion/Makefile.common Sat Jul 13 15:33:23 2013 (r322937) +++ head/devel/subversion/Makefile.common Sat Jul 13 15:36:50 2013 (r322938) @@ -3,7 +3,7 @@ PORTNAME= subversion PORTVERSION= 1.8.0 -PORTREVISION?= 2 +PORTREVISION?= 3 CATEGORIES+= devel MASTER_SITES= ${MASTER_SITE_APACHE:S/$/:main/} \ ${MASTER_SITE_LOCAL:S/$/:book/} Added: head/devel/subversion/files/patch-fix4383 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/devel/subversion/files/patch-fix4383 Sat Jul 13 15:36:50 2013 (r322938) @@ -0,0 +1,77 @@ +Index: subversion/libsvn_wc/wc_db_wcroot.c +=================================================================== +--- subversion/libsvn_wc/wc_db_wcroot.c (revision 1496006) ++++ subversion/libsvn_wc/wc_db_wcroot.c (revision 1496007) +@@ -434,6 +434,8 @@ + svn_boolean_t always_check = FALSE; + int wc_format = 0; + const char *adm_relpath; ++ /* Non-NULL if WCROOT is found through a symlink: */ ++ const char *symlink_wcroot_abspath = NULL; + + /* ### we need more logic for finding the database (if it is located + ### outside of the wcroot) and then managing all of that within DB. +@@ -611,6 +613,7 @@ + if (found_wcroot) + break; + ++ symlink_wcroot_abspath = local_abspath; + SVN_ERR(read_link_target(&local_abspath, local_abspath, + scratch_pool)); + try_symlink_as_dir: +@@ -632,6 +635,7 @@ + local_abspath = svn_dirent_dirname(local_abspath, scratch_pool); + + moved_upwards = TRUE; ++ symlink_wcroot_abspath = NULL; + + /* Is the parent directory recorded in our hash? */ + found_wcroot = svn_hash_gets(db->dir_data, local_abspath); +@@ -669,7 +673,10 @@ + (ie. where we found it). */ + + err = svn_wc__db_pdh_create_wcroot(wcroot, +- apr_pstrdup(db->state_pool, local_abspath), ++ apr_pstrdup(db->state_pool, ++ symlink_wcroot_abspath ++ ? symlink_wcroot_abspath ++ : local_abspath), + sdb, wc_id, FORMAT_FROM_SDB, + db->verify_format, db->enforce_empty_wq, + db->state_pool, scratch_pool); +@@ -737,7 +744,10 @@ + } + + SVN_ERR(svn_wc__db_pdh_create_wcroot(wcroot, +- apr_pstrdup(db->state_pool, local_abspath), ++ apr_pstrdup(db->state_pool, ++ symlink_wcroot_abspath ++ ? symlink_wcroot_abspath ++ : local_abspath), + NULL, UNKNOWN_WC_ID, wc_format, + db->verify_format, db->enforce_empty_wq, + db->state_pool, scratch_pool)); +@@ -809,6 +819,7 @@ + scratch_pool)); + if (resolved_kind == svn_node_dir) + { ++ symlink_wcroot_abspath = original_abspath; + SVN_ERR(read_link_target(&local_abspath, original_abspath, + scratch_pool)); + /* This handle was opened in this function but is not going +@@ -826,6 +837,15 @@ + apr_pstrdup(db->state_pool, local_dir_abspath), + *wcroot); + ++ /* If the WCROOT was found through a symlink pointing at the root of ++ * the WC, its cache entry is now keyed on the link's target path. ++ * Cache the WCROOT under the symlink's path as well. Otherwise, future ++ * wcroot queries for the symlink path would construct a fresh wcroot. */ ++ if (symlink_wcroot_abspath) ++ svn_hash_sets(db->dir_data, ++ apr_pstrdup(db->state_pool, symlink_wcroot_abspath), ++ *wcroot); ++ + /* Did we traverse up to parent directories? */ + if (!moved_upwards) + { Added: head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/devel/subversion/files/patch-subversion--libsvn_subr--gpg_agent.c Sat Jul 13 15:36:50 2013 (r322938) @@ -0,0 +1,145 @@ +--- subversion/libsvn_subr/gpg_agent.c 2013/07/08 14:27:14 1500761 ++++ subversion/libsvn_subr/gpg_agent.c 2013/07/08 14:29:04 1500762 +@@ -156,42 +156,28 @@ + return (strncmp(buf, "OK", 2) == 0); + } + +-/* Implementation of svn_auth__password_get_t that retrieves the password +- from gpg-agent */ ++ ++/* Locate a running GPG Agent, and return an open file descriptor ++ * for communication with the agent in *NEW_SD. If no running agent ++ * can be found, set *NEW_SD to -1. */ + static svn_error_t * +-password_get_gpg_agent(svn_boolean_t *done, +- const char **password, +- apr_hash_t *creds, +- const char *realmstring, +- const char *username, +- apr_hash_t *parameters, +- svn_boolean_t non_interactive, +- apr_pool_t *pool) ++find_running_gpg_agent(int *new_sd, apr_pool_t *pool) + { +- int sd; ++ char *buffer; + char *gpg_agent_info = NULL; ++ const char *socket_name = NULL; ++ const char *request = NULL; + const char *p = NULL; + char *ep = NULL; +- char *buffer; +- +- apr_array_header_t *socket_details; +- const char *request = NULL; +- const char *cache_id = NULL; +- struct sockaddr_un addr; +- const char *tty_name; +- const char *tty_type; +- const char *lc_ctype; +- const char *display; +- const char *socket_name = NULL; +- svn_checksum_t *digest = NULL; +- char *password_prompt; +- char *realm_prompt; ++ int sd; + +- *done = FALSE; ++ *new_sd = -1; + + gpg_agent_info = getenv("GPG_AGENT_INFO"); + if (gpg_agent_info != NULL) + { ++ apr_array_header_t *socket_details; ++ + socket_details = svn_cstring_split(gpg_agent_info, ":", TRUE, + pool); + socket_name = APR_ARRAY_IDX(socket_details, 0, const char *); +@@ -201,6 +187,8 @@ + + if (socket_name != NULL) + { ++ struct sockaddr_un addr; ++ + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, socket_name, sizeof(addr.sun_path) - 1); + addr.sun_path[sizeof(addr.sun_path) - 1] = '\0'; +@@ -273,6 +261,44 @@ + return SVN_NO_ERROR; + } + ++ *new_sd = sd; ++ return SVN_NO_ERROR; ++} ++ ++/* Implementation of svn_auth__password_get_t that retrieves the password ++ from gpg-agent */ ++static svn_error_t * ++password_get_gpg_agent(svn_boolean_t *done, ++ const char **password, ++ apr_hash_t *creds, ++ const char *realmstring, ++ const char *username, ++ apr_hash_t *parameters, ++ svn_boolean_t non_interactive, ++ apr_pool_t *pool) ++{ ++ int sd; ++ const char *p = NULL; ++ char *ep = NULL; ++ char *buffer; ++ const char *request = NULL; ++ const char *cache_id = NULL; ++ const char *tty_name; ++ const char *tty_type; ++ const char *lc_ctype; ++ const char *display; ++ svn_checksum_t *digest = NULL; ++ char *password_prompt; ++ char *realm_prompt; ++ ++ *done = FALSE; ++ ++ SVN_ERR(find_running_gpg_agent(&sd, pool)); ++ if (sd == -1) ++ return SVN_NO_ERROR; ++ ++ buffer = apr_palloc(pool, BUFFER_SIZE); ++ + /* Send TTY_NAME to the gpg-agent daemon. */ + tty_name = getenv("GPG_TTY"); + if (tty_name != NULL) +@@ -388,8 +414,8 @@ + password in GPG Agent if that's how this particular integration + worked. But it isn't. GPG Agent stores the password provided by + the user via the pinentry program immediately upon its provision +- (and regardless of its accuracy as passwords go), so there's +- nothing really to do here. */ ++ (and regardless of its accuracy as passwords go), so we just need ++ to check if a usable GPG Agent exists. */ + static svn_error_t * + password_set_gpg_agent(svn_boolean_t *done, + apr_hash_t *creds, +@@ -400,7 +426,21 @@ + svn_boolean_t non_interactive, + apr_pool_t *pool) + { +- *done = TRUE; ++ int sd; ++ const char *tty_name; ++ ++ *done = FALSE; ++ ++ SVN_ERR(find_running_gpg_agent(&sd, pool)); ++ if (sd == -1) ++ return SVN_NO_ERROR; ++ ++ close(sd); ++ ++ /* Also ensure that GPG_TTY is set in the evironment. ++ * If it isn't set the user won't be prompted by the agent. */ ++ tty_name = getenv("GPG_TTY"); ++ *done = (tty_name != NULL); + + return SVN_NO_ERROR; + }