Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 1DBDE200D4E for ; Thu, 7 Dec 2017 15:42:18 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 1CACA160C1E; Thu, 7 Dec 2017 14:42:18 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id DFD9E160C0C for ; Thu, 7 Dec 2017 15:42:16 +0100 (CET) Received: (qmail 58206 invoked by uid 500); 7 Dec 2017 14:42:16 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 58196 invoked by uid 99); 7 Dec 2017 14:42:16 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 07 Dec 2017 14:42:16 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 173373A0167 for ; Thu, 7 Dec 2017 14:42:13 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1817375 [2/2] - in /subversion/branches/shelve-checkpoint: ./ build/generator/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_fs_fs/ subversion/libsvn_ra_serf/ subversion/libsvn_ra_svn/ subversi... Date: Thu, 07 Dec 2017 14:42:10 -0000 To: commits@subversion.apache.org From: julianfoad@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20171207144213.173373A0167@svn01-us-west.apache.org> archived-at: Thu, 07 Dec 2017 14:42:18 -0000 Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py Thu Dec 7 14:42:10 2017 @@ -129,6 +129,15 @@ def check_hotcopy_fsfs_fsx(src, dst): if src_file == 'rep-cache.db': db1 = svntest.sqlite3.connect(src_path) db2 = svntest.sqlite3.connect(dst_path) + schema1 = db1.execute("pragma user_version").fetchone()[0] + schema2 = db2.execute("pragma user_version").fetchone()[0] + if schema1 != schema2: + raise svntest.Failure("rep-cache schema differs: '%s' vs. '%s'" + % (schema1, schema2)) + # Can't test newer rep-cache schemas with an old built-in SQLite. + if schema1 >= 2 and svntest.sqlite3.sqlite_version_info < (3, 8, 2): + continue + rows1 = [] rows2 = [] for row in db1.execute("select * from rep_cache order by hash"): @@ -746,7 +755,7 @@ def verify_windows_paths_in_repos(sbox): "* Verified revision 0.\n", "* Verified revision 1.\n", "* Verified revision 2.\n"], output) - elif svntest.main.fs_has_rep_sharing(): + elif svntest.main.fs_has_rep_sharing() and not svntest.main.is_fs_type_bdb(): svntest.verify.compare_and_display_lines( "Error while running 'svnadmin verify'.", 'STDOUT', ["* Verifying repository metadata ...\n", @@ -790,6 +799,10 @@ def fsfs_file(repo_dir, kind, rev): def verify_incremental_fsfs(sbox): """svnadmin verify detects corruption dump can't""" + if svntest.main.options.fsfs_version is not None and \ + svntest.main.options.fsfs_version not in [4, 6]: + raise svntest.Skip("Unsupported prepackaged repository version") + # setup a repo with a directory 'c:hi' # use physical addressing as this is hard to provoke with logical addressing sbox.build(create_wc = False, @@ -807,7 +820,7 @@ def verify_incremental_fsfs(sbox): # the listing itself is valid. r2 = fsfs_file(sbox.repo_dir, 'revs', '2') if r2.endswith('pack'): - raise svntest.Skip('Test doesn\'t handle packed revisions') + raise svntest.Skip("Test doesn't handle packed revisions") fp = open(r2, 'wb') fp.write(b"""id: 0-2.0.r2/0 @@ -1654,6 +1667,10 @@ text def verify_non_utf8_paths(sbox): "svnadmin verify with non-UTF-8 paths" + if svntest.main.options.fsfs_version is not None and \ + svntest.main.options.fsfs_version not in [4, 6]: + raise svntest.Skip("Unsupported prepackaged repository version") + dumpfile = clean_dumpfile() # Corruption only possible in physically addressed revisions created @@ -1682,9 +1699,6 @@ def verify_non_utf8_paths(sbox): elif line == b"text: 1 340 44 32 a6be7b4cf075fd39e6a99eb69a31232b\n": # phys, deltified directories: fix up the representation checksum fp_new.write(b"text: 1 340 44 32 f2e93e73272cac0f18fccf16f224eb93\n") - elif line == b"text: 1 6 31 31 90f306aa9bfd72f456072076a2bd94f7\n": - # log addressing: fix up the representation checksum - fp_new.write(b"text: 1 6 31 31 db2d4a0bad5dff0aea9a288dec02f1fb\n") elif line == b"cpath: /A\n": # also fix up the 'created path' field fp_new.write(b"cpath: /\xE6\n") @@ -2520,7 +2534,7 @@ def verify_denormalized_names(sbox): ".*Verified revision 7."] # The BDB backend doesn't do global metadata verification. - if (svntest.main.fs_has_rep_sharing()): + if (svntest.main.fs_has_rep_sharing() and not svntest.main.is_fs_type_bdb()): expected_output_regex_list.insert(0, ".*Verifying repository metadata.*") if svntest.main.options.fsfs_sharding is not None: @@ -3351,6 +3365,7 @@ def dump_no_op_change(sbox): sbox2.repo_url + '/bar') @XFail(svntest.main.is_fs_type_bdb) +@XFail(svntest.main.is_fs_type_fsx) @Issue(4623) def dump_no_op_prop_change(sbox): "svnadmin dump with no-op property change" Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/__init__.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/__init__.py?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/__init__.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/__init__.py Thu Dec 7 14:42:10 2017 @@ -35,11 +35,8 @@ if sys.hexversion < 0x2070000: try: import sqlite3 except ImportError: - try: - from pysqlite2 import dbapi2 as sqlite3 - except ImportError: - sys.stderr.write('[SKIPPED] Python sqlite3 module required\n') - sys.exit(0) + sys.stderr.write('[SKIPPED] Python sqlite3 module required\n') + sys.exit(0) # don't export this name del sys Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py Thu Dec 7 14:42:10 2017 @@ -1574,9 +1574,11 @@ def is_fs_log_addressing(): return is_fs_type_fsx() or \ (is_fs_type_fsfs() and options.server_minor_version >= 9) +def fs_has_sha1(): + return fs_has_rep_sharing() + def fs_has_rep_sharing(): - return is_fs_type_fsx() or \ - (is_fs_type_fsfs() and options.server_minor_version >= 6) + return options.server_minor_version >= 6 def fs_has_pack(): return is_fs_type_fsx() or \ @@ -2216,19 +2218,18 @@ def parse_options(arglist=sys.argv[1:], % SVN_VER_MINOR) # Make sure the server-minor-version matches the fsfs-version parameter. + # + # Server versions that introduced the respective FSFS formats: + introducing_version = { 1:1, 2:4, 3:5, 4:6, 6:8, 7:9 } if options.fsfs_version: - if options.fsfs_version == 6: - if options.server_minor_version \ - and options.server_minor_version != 8 \ - and options.server_minor_version != SVN_VER_MINOR: - parser.error("--fsfs-version=6 requires --server-minor-version=8") - options.server_minor_version = 8 - if options.fsfs_version == 4: + if options.fsfs_version in introducing_version: + introduced_in = introducing_version[options.fsfs_version] if options.server_minor_version \ - and options.server_minor_version != 7 \ + and options.server_minor_version != introduced_in \ and options.server_minor_version != SVN_VER_MINOR: - parser.error("--fsfs-version=4 requires --server-minor-version=7") - options.server_minor_version = 7 + parser.error("--fsfs-version=%d requires --server-minor-version=%d" \ + % (options.fsfs_version, introduced_in)) + options.server_minor_version = introduced_in pass # ### Add more tweaks here if and when we support pre-cooked versions # ### of FSFS repositories. Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py Thu Dec 7 14:42:10 2017 @@ -467,10 +467,11 @@ def verify_exit_code(message, actual, ex # A simple dump file parser. While sufficient for the current # testsuite it doesn't cope with all valid dump files. class DumpParser: - def __init__(self, lines): + def __init__(self, lines, ignore_sha1=False): self.current = 0 self.lines = lines self.parsed = {} + self.ignore_sha1 = ignore_sha1 def parse_line(self, regex, required=True): m = re.match(regex, self.lines[self.current]) @@ -660,6 +661,9 @@ class DumpParser: if not header in headers: node[key] = None continue + if self.ignore_sha1 and (key in ['copy_sha1', 'text_sha1']): + node[key] = None + continue m = re.match(regex, headers[header]) if not m: raise SVNDumpParseError("expected '%s' at line %d\n%s" @@ -735,8 +739,7 @@ def compare_dump_files(message, label, e of lines as returned by run_and_verify_dump, and check that the same revisions, nodes, properties, etc. are present in both dumps. """ - - parsed_expected = DumpParser(expected).parse() + parsed_expected = DumpParser(expected, not svntest.main.fs_has_sha1()).parse() parsed_actual = DumpParser(actual).parse() if ignore_uuid: Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/wc.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/wc.py?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/wc.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/wc.py Thu Dec 7 14:42:10 2017 @@ -1092,17 +1092,8 @@ def svn_uri_quote(url): def python_sqlite_can_read_wc(): """Check if the Python builtin is capable enough to peek into wc.db""" - - try: - db = svntest.sqlite3.connect('') - - c = db.cursor() - c.execute('select sqlite_version()') - ver = tuple(map(int, c.fetchall()[0][0].split('.'))) - - return ver >= (3, 6, 18) # Currently enough (1.7-1.9) - except: - return False + # Currently enough (1.7-1.9) + return svntest.sqlite3.sqlite_version_info >= (3, 6, 18) def open_wc_db(local_path): """Open the SQLite DB for the WC path LOCAL_PATH. Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py Thu Dec 7 14:42:10 2017 @@ -6840,6 +6840,21 @@ def update_delete_switched(sbox): svntest.actions.run_and_verify_update(wc_dir, None, None, expected_status, [], False, sbox.ospath('A'), '-r', 0) +@XFail() +def update_add_missing_local_add(sbox): + "update adds missing local addition" + + sbox.build(read_only=True) + + # Note that updating 'A' to r0 doesn't reproduce this issue... + sbox.simple_update('', revision='0') + sbox.simple_mkdir('A') + sbox.simple_add_text('mumumu', 'A/mu') + os.unlink(sbox.ospath('A/mu')) + os.rmdir(sbox.ospath('A')) + + sbox.simple_update() + ####################################################################### # Run the tests @@ -6930,6 +6945,7 @@ test_list = [ None, update_add_conflicted_deep, missing_tmp_update, update_delete_switched, + update_add_missing_local_add, ] if __name__ == '__main__': Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_ra/ra-test.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_ra/ra-test.c?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_ra/ra-test.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_ra/ra-test.c Thu Dec 7 14:42:10 2017 @@ -427,17 +427,7 @@ lock_cb(void *baton, struct lock_result_t *result = apr_palloc(b->pool, sizeof(struct lock_result_t)); - if (lock) - { - result->lock = apr_palloc(b->pool, sizeof(svn_lock_t)); - *result->lock = *lock; - result->lock->path = apr_pstrdup(b->pool, lock->path); - result->lock->token = apr_pstrdup(b->pool, lock->token); - result->lock->owner = apr_pstrdup(b->pool, lock->owner); - result->lock->comment = apr_pstrdup(b->pool, lock->comment); - } - else - result->lock = NULL; + result->lock = svn_lock_dup(lock, b->pool); result->err = ra_err; svn_hash_sets(b->results, apr_pstrdup(b->pool, path), result); @@ -1682,6 +1672,118 @@ commit_empty_last_change(const svn_test_ return SVN_NO_ERROR; } +static svn_error_t * +commit_locked_file(const svn_test_opts_t *opts, apr_pool_t *pool) +{ + const char *url; + svn_ra_callbacks2_t *cbtable; + svn_ra_session_t *session; + const svn_delta_editor_t *editor; + void *edit_baton; + void *root_baton; + void *file_baton; + struct lock_result_t *lock_result; + apr_hash_t *lock_tokens; + svn_txdelta_window_handler_t handler; + void *handler_baton; + svn_revnum_t fetched_rev; + apr_hash_t *fetched_props; + const svn_string_t *propval; + + SVN_ERR(svn_test__create_repos2(NULL, &url, NULL, + "test-repo-commit-locked-file-test", + opts, pool, pool)); + + SVN_ERR(svn_ra_initialize(pool)); + SVN_ERR(svn_ra_create_callbacks(&cbtable, pool)); + SVN_ERR(svn_test__init_auth_baton(&cbtable->auth_baton, pool)); + + SVN_ERR(svn_ra_open4(&session, NULL, url, NULL, cbtable, + NULL, NULL, pool)); + SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &edit_baton, + apr_hash_make(pool), + NULL, NULL, NULL, TRUE, pool)); + /* Add a file. */ + SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM, + pool, &root_baton)); + SVN_ERR(editor->add_file("file", root_baton, NULL, SVN_INVALID_REVNUM, + pool, &file_baton)); + SVN_ERR(editor->close_file(file_baton, NULL, pool)); + SVN_ERR(editor->close_directory(root_baton, pool)); + SVN_ERR(editor->close_edit(edit_baton, pool)); + + /* Acquire a lock on this file. */ + { + struct lock_baton_t baton = {0}; + svn_revnum_t rev = 1; + apr_hash_t *lock_targets; + + baton.results = apr_hash_make(pool); + baton.pool = pool; + + lock_targets = apr_hash_make(pool); + svn_hash_sets(lock_targets, "file", &rev); + SVN_ERR(svn_ra_lock(session, lock_targets, "comment", FALSE, + lock_cb, &baton, pool)); + + SVN_ERR(expect_lock("file", baton.results, session, pool)); + lock_result = svn_hash_gets(baton.results, "file"); + } + + /* Open a new session using the file parent's URL. */ + SVN_ERR(svn_ra_open4(&session, NULL, url, NULL, cbtable, + NULL, NULL, pool)); + + /* Create a new commit editor supplying our lock token. */ + lock_tokens = apr_hash_make(pool); + svn_hash_sets(lock_tokens, "file", lock_result->lock->token); + SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &edit_baton, + apr_hash_make(pool), NULL, NULL, + lock_tokens, TRUE, pool)); + /* Edit the locked file. */ + SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM, + pool, &root_baton)); + SVN_ERR(editor->open_file("file", root_baton, SVN_INVALID_REVNUM, pool, + &file_baton)); + SVN_ERR(editor->apply_textdelta(file_baton, NULL, pool, &handler, + &handler_baton)); + SVN_ERR(svn_txdelta_send_string(svn_string_create("A", pool), + handler, handler_baton, pool)); + SVN_ERR(editor->close_file(file_baton, NULL, pool)); + SVN_ERR(editor->close_directory(root_baton, pool)); + SVN_ERR(editor->close_edit(edit_baton, pool)); + + /* Check the result. */ + SVN_ERR(svn_ra_get_file(session, "file", SVN_INVALID_REVNUM, NULL, + &fetched_rev, NULL, pool)); + SVN_TEST_INT_ASSERT((int) fetched_rev, 2); + + /* Change property of the locked file. */ + SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &edit_baton, + apr_hash_make(pool), NULL, NULL, + lock_tokens, TRUE, pool)); + SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM, + pool, &root_baton)); + SVN_ERR(editor->open_file("file", root_baton, SVN_INVALID_REVNUM, pool, + &file_baton)); + SVN_ERR(editor->change_file_prop(file_baton, "propname", + svn_string_create("propval", pool), + pool)); + SVN_ERR(editor->close_file(file_baton, NULL, pool)); + SVN_ERR(editor->close_directory(root_baton, pool)); + SVN_ERR(editor->close_edit(edit_baton, pool)); + + /* Check the result. */ + SVN_ERR(svn_ra_get_file(session, "file", SVN_INVALID_REVNUM, NULL, + &fetched_rev, &fetched_props, pool)); + SVN_TEST_INT_ASSERT((int) fetched_rev, 3); + propval = svn_hash_gets(fetched_props, "propname"); + SVN_TEST_ASSERT(propval); + SVN_TEST_STRING_ASSERT(propval->data, "propval"); + + return SVN_NO_ERROR; +} + /* The test table. */ @@ -1716,6 +1818,8 @@ static struct svn_test_descriptor_t test "verify checkout over a tunnel"), SVN_TEST_OPTS_PASS(commit_empty_last_change, "check how last change applies to empty commit"), + SVN_TEST_OPTS_PASS(commit_locked_file, + "check commit editor for a locked file"), SVN_TEST_NULL }; Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/subst_translate-test.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/subst_translate-test.c?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/subst_translate-test.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/subst_translate-test.c Thu Dec 7 14:42:10 2017 @@ -158,7 +158,7 @@ test_svn_subst_translate_string2_null_en }; const char **other_locale; - strncpy(orig_lc_all, setlocale(LC_ALL, NULL), sizeof (orig_lc_all)); + strncpy(orig_lc_all, setlocale(LC_ALL, NULL), sizeof (orig_lc_all) - 1); for (other_locale = other_locales; *other_locale != NULL; ++other_locale) { Modified: subversion/branches/shelve-checkpoint/tools/client-side/bash_completion URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/bash_completion?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/bash_completion (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/bash_completion Thu Dec 7 14:42:10 2017 @@ -883,8 +883,8 @@ _svn() --force" ;; cleanup) - cmdOpts="--diff3-cmd $pOpts --include-externals -q --quiet\ - --remove-ignored --remove-unversioned" + cmdOpts="$pOpts --include-externals -q --quiet\ + --remove-ignored --remove-unversioned --vacuum-pristines" ;; commit|ci) cmdOpts="$mOpts $qOpts $nOpts --targets --editor-cmd $pOpts \ @@ -953,7 +953,7 @@ _svn() cmdOpts="$mOpts $qOpts --editor-cmd $pOpts --parents" ;; move|mv|rename|ren) - cmdOpts="$mOpts $rOpts $qOpts --force --editor-cmd $pOpts \ + cmdOpts="$mOpts $qOpts --force --editor-cmd $pOpts \ --parents --allow-mixed-revisions" ;; patch) @@ -1006,7 +1006,7 @@ _svn() $rOpts $cOpts" ;; switch|sw) - cmdOpts="--relocate $rOpts $nOpts $qOpts $pOpts --diff3-cmd \ + cmdOpts="$rOpts $nOpts $qOpts $pOpts --diff3-cmd \ --force --accept --ignore-externals --set-depth \ --ignore-ancestry" ;; @@ -1026,13 +1026,13 @@ _svn() cmdOpts="$qOpts save restore list --list" ;; shelve) - cmdOpts="$qOpts --keep-local --delete --list $qOpts --dry-run --depth --targets $cOpts" + cmdOpts="$qOpts --keep-local --delete --list -m --message -F --file --encoding --force-log --editor-cmd --dry-run --depth --targets $cOpts $pOpts" ;; unshelve) - cmdOpts="$qOpts --list $qOpts --dry-run" + cmdOpts="$qOpts --list $pOpts --dry-run" ;; shelves) - cmdOpts="$qOpts" + cmdOpts="$qOpts $pOpts" ;; *) ;; Modified: subversion/branches/shelve-checkpoint/tools/client-side/bash_completion_test URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/bash_completion_test?rev=1817375&r1=1817374&r2=1817375&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/bash_completion_test (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/bash_completion_test Thu Dec 7 14:42:10 2017 @@ -117,7 +117,7 @@ get_svn_options() { # Remove deprecated options grep -v deprecated | # Find the relevant lines; remove "arg" and description. - sed -n -e '1,/^Valid options:$/d;/^ -/!d' \ + sed -n -e '1,/^\(Valid\|Global\) options:$/d;/^ -/!d' \ -e 's/\( ARG\)* * : .*//;p' | # Remove brackets; put each word on its own line. tr -d '] ' | tr '[' '\n'