Bring up-to-date with trunk.
git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/fsfs-pack@874575 13f79535-47bb-0310-9956-ffa450edef68
@@ -75,13 +75,13 @@ AC_DEFUN(SVN_FIND_SWIG,
# packages/rpm/rhel-4/subversion.spec
if test -n "$SWIG_VERSION" &&
test "$SWIG_VERSION" -ge "103024" &&
- test "$SWIG_VERSION" -le "103031"; then
+ test "$SWIG_VERSION" -le "103036"; then
SWIG_SUITABLE=yes
else
SWIG_SUITABLE=no
AC_MSG_WARN([Detected SWIG version $SWIG_VERSION_RAW])
AC_MSG_WARN([Subversion requires 1.3.24 or later, and is known to work])
- AC_MSG_WARN([with versions up to 1.3.31])
+ AC_MSG_WARN([with versions up to 1.3.36])
fi
fi
@@ -192,7 +192,7 @@ _re_args = re.compile(r'"(?:[^\\"]|\\.)*"|[-\w.]+')
# block commands and their argument counts
_block_cmd_specs = { 'if-index':2, 'for':1, 'is':2 }
-_block_cmds = _block_cmd_specs.keys()
+_block_cmds = list(_block_cmd_specs.keys())
# two regular expressions for compressing whitespace. the first is used to
# compress any whitespace including a newline into a single newline. the
@@ -234,7 +234,7 @@ class DependencyGraph:
return sources
def get_deps(self, type):
- return self.deps[type].items()
+ return list(self.deps[type].items())
# dependency types
dep_types = [
@@ -581,7 +581,7 @@ class TargetSWIG(TargetLib):
self.targets[lang] = target
def get_targets(self):
- return self.targets.values()
+ return list(self.targets.values())
def get_dep_targets(self, target):
target = self.targets.get(target.lang, None)
@@ -234,7 +234,7 @@ class Generator(gen_win.WinGeneratorBase):
configs.append(gen_win.ProjectItem(name=self.configs[i], index=i))
# sort the values for output stability.
- guidvals = guids.values()
+ guidvals = list(guids.values())
guidvals.sort()
data = {
@@ -373,7 +373,7 @@ class WinGeneratorBase(GeneratorBase):
deps = self.graph.deps[gen_base.DT_LINK]
deps[dep.name] = deps[target.name]
- for key in deps.iterkeys():
+ for key in deps.keys():
# Link everything except tests against the dll. Tests need to be linked
# against the static libraries because they sometimes access internal
# library functions.
@@ -990,7 +990,7 @@ class WinGeneratorBase(GeneratorBase):
reldir = ''
sources[src] = src, obj, reldir
- return sources.values()
+ return list(sources.values())
def write_file_if_changed(self, fname, new_contents):
"""Rewrite the file if new_contents are different than its current content.
@@ -432,7 +432,7 @@ def _make_dist(cfg):
shutil.rmtree(distdir)
os.makedirs(distdir)
- dirlist = _disttree.keys()
+ dirlist = list(_disttree.keys())
dirlist.sort()
for reldir in dirlist:
@@ -46,13 +46,13 @@ def main(fname, gentype, verfname=None,
if ('--debug', '') in other_options:
for dep_type, target_dict in generator.graph.deps.items():
- sorted_targets = target_dict.keys(); sorted_targets.sort()
+ sorted_targets = list(target_dict.keys()); sorted_targets.sort()
for target in sorted_targets:
print(dep_type + ": " + _objinfo(target))
for source in target_dict[target]:
print(" " + _objinfo(source))
print("=" * 72)
- gen_keys = generator.__dict__.keys()
+ gen_keys = list(generator.__dict__.keys())
gen_keys.sort()
for name in gen_keys:
value = generator.__dict__[name]
@@ -82,7 +82,7 @@ def _usage_exit():
print(" --reload reuse all options from the previous invocation")
print(" of the script, except -s, -t, --debug and --reload")
print(" -t TYPE use the TYPE generator; can be one of:")
- items = gen_modules.items()
+ items = list(gen_modules.items())
items.sort()
for name, (module, desc) in items:
print(' %-12s %s' % (name, desc))
@@ -28,6 +28,8 @@ class SvnDate(str):
class Hash(DictMixin):
"""A dictionary wrapper for apr_hash_t"""
+ _keys = DictMixin.iterkeys
+
def __init__(self, type, items={}, wrapper=None, dup=None):
self.type = type
self.pool = Pool()
@@ -68,13 +70,13 @@ class Hash(DictMixin):
apr_hash_set(self, key, len(key), NULL)
def keys(self):
- return list(self.iterkeys())
+ return list(self._keys())
def __iter__(self):
- for (key, _) in self.iteritems():
+ for (key, _) in self.items():
yield key
- def iteritems(self):
+ def items(self):
pool = Pool()
hi = apr_hash_first(pool, self)
while hi:
@@ -70,7 +70,7 @@ for entry in \
entry.date.as_human_string(), num_lines))
if options.verbose:
print("Changed paths:")
- for key, value in entry.changed_paths.iteritems():
+ for key, value in entry.changed_paths.items():
value = value[0]
if value.copyfrom_rev != SVN_INVALID_REVNUM:
print(" %s %s (from %s:%d)" % (value.action, key,
@@ -50,7 +50,7 @@ s = RemoteRepository(repos_url, user=User(username=options.username))
txn = s.txn()
-for name in s.list("").iterkeys():
+for name in s.list("").keys():
txn.delete(name)
txn.copy(src_path="", dest_path=new_dir_name)
@@ -1164,7 +1164,9 @@ svn_client_ctx_t *SVNClient::getContext(const char *message)
/* Populate the registered providers with the platform-specific providers */
SVN_JNI_ERR(svn_auth_get_platform_specific_client_providers(&providers,
- pool), NULL);
+ NULL,
+ pool),
+ NULL);
/* The main disk-caching auth providers, for both
* 'username/password' creds and 'username' creds. */
@@ -126,9 +126,9 @@ class SubversionMergeinfoTestCase(unittest.TestCase):
"Missing revision range 'non-inheritable' flag")
def compare_mergeinfo_catalogs(self, catalog1, catalog2):
- keys1 = catalog1.keys()
+ keys1 = list(catalog1.keys())
keys1.sort()
- keys2 = catalog2.keys()
+ keys2 = list(catalog2.keys())
keys2.sort()
self.assertEqual(keys1, keys2)
@@ -136,9 +136,9 @@ class SubversionMergeinfoTestCase(unittest.TestCase):
self.compare_mergeinfos(catalog1[k], catalog2[k])
def compare_mergeinfos(self, mergeinfo1, mergeinfo2):
- keys1 = mergeinfo1.keys()
+ keys1 = list(mergeinfo1.keys())
keys1.sort()
- keys2 = mergeinfo2.keys()
+ keys2 = list(mergeinfo2.keys())
keys2.sort()
self.assertEqual(keys1, keys2)
@@ -161,7 +161,7 @@ class SubversionRepositoryAccessTestCase(unittest.TestCase):
if file_baton is not None:
editor.close_file(file_baton, None, pool)
return dir_baton
- delta.path_driver(editor, edit_baton, -1, all_paths.keys(), driver_cb)
+ delta.path_driver(editor, edit_baton, -1, list(all_paths.keys()), driver_cb)
editor.close_edit(edit_baton)
except:
try:
@@ -185,7 +185,7 @@ class SubversionRepositoryAccessTestCase(unittest.TestCase):
self.assertEqual(author, info.author)
self.assertEqual(date, info.date)
self.assertEqual(message, revprops['svn:log'])
- for (path, change) in changed_paths.iteritems():
+ for (path, change) in changed_paths.items():
path = path.lstrip('/')
self.assert_(path in all_paths)
if path in to_delete:
@@ -287,7 +287,7 @@ class SubversionRepositoryAccessTestCase(unittest.TestCase):
called[0] = True
self.assertEqual(log_entry.revision, rev)
if discover_changed_paths:
- self.assertEqual(log_entry.changed_paths.keys(), ['/bla3'])
+ self.assertEqual(list(log_entry.changed_paths.keys()), ['/bla3'])
changed_path = log_entry.changed_paths['/bla3']
self.assert_(changed_path.action in ['A', 'D', 'R', 'M'])
self.assertEqual(changed_path.copyfrom_path, None)
@@ -299,7 +299,7 @@ class SubversionRepositoryAccessTestCase(unittest.TestCase):
elif len(log_revprops) == 0:
self.assert_(log_entry.revprops == None or len(log_entry.revprops) == 0)
else:
- revprop_names = log_entry.revprops.keys()
+ revprop_names = list(log_entry.revprops.keys())
revprop_names.sort()
log_revprops.sort()
self.assertEqual(revprop_names, log_revprops)
#!/usr/bin/env python
+# -*- coding: utf-8 -*-
#
# Copyright (C) 2003, 2004, 2005 Edgewall Software
# Copyright (C) 2003, 2004, 2005 Jonas Borgström <
[email protected]>
@@ -188,7 +188,7 @@ class SubversionWorkingCopyTestCase(unittest.TestCase):
def test_entries_read(self):
entries = wc.entries_read(self.wc, True)
- self.assertEqual(['', 'tags', 'branches', 'trunk'], entries.keys())
+ self.assertEqual(['', 'tags', 'branches', 'trunk'], list(entries.keys()))
def test_get_ignores(self):
self.assert_(isinstance(wc.get_ignores(None, self.wc), list))
@@ -301,7 +301,7 @@ class SubversionWorkingCopyTestCase(unittest.TestCase):
# Save prop changes.
got_prop_changes = []
def props_changed(path, propchanges):
- for (name, value) in propchanges.iteritems():
+ for (name, value) in propchanges.items():
(kind, unused_prefix_len) = core.svn_property_kind(name)
if kind != core.svn_prop_regular_kind:
continue
#include <apr_pools.h>
#include "svn_types.h"
+#include "svn_config.h"
#include "svn_version.h"
#ifdef __cplusplus
@@ -793,10 +794,6 @@ svn_auth_get_simple_provider(svn_auth_provider_object_t **provider,
*
* svn_auth_get_<name>_<type>_provider(@a provider, @a pool);
*
- * In the case of the "gnome_keyring" and the "kwallet" @a platform_type, an
- * error can be thrown in the event that loading the respective shared library
- * fails.
- *
* @since New in 1.6.
*/
svn_error_t *
@@ -806,14 +803,14 @@ svn_auth_get_platform_specific_provider(svn_auth_provider_object_t **provider,
apr_pool_t *pool);
/** Create and return an array of <tt>svn_auth_provider_object_t *</tt> objects.
- * Only client auth providers available for the current platform are returned.
+ * Only client authentication providers available for the current platform are
+ * returned. Order of the platform-specific authentication providers is
+ * determined by the 'password-stores' configuration option which is retrieved
+ * from @a config. @a config can be NULL.
*
* Create and allocate @a *providers in @a pool.
*
- * Can throw an error if the platform supports the "gnome_keyring" or the
- * "kwallet" auth provider and loading the respective shared library fails.
- *
- * Order of the platform-specific auth providers:
+ * Default order of the platform-specific authentication providers:
* 1. gnome-keyring
* 2. kwallet
* 3. keychain
@@ -823,6 +820,7 @@ svn_auth_get_platform_specific_provider(svn_auth_provider_object_t **provider,
*/
svn_error_t *
svn_auth_get_platform_specific_client_providers(apr_array_header_t **providers,
+ svn_config_t *config,
apr_pool_t *pool);
#if (defined(WIN32) && !defined(__MINGW32__)) || defined(DOXYGEN)
@@ -1725,7 +1725,7 @@ svn_client_commit4(svn_commit_info_t **commit_info_p,
* @a changelist_name, FALSE for @a keep_changelist, NULL for @a
* revprop_table, and @a depth set according to @a recurse: if @a
* recurse is TRUE, use @c svn_depth_infinity, else @c
- * svn_depth_files.
+ * svn_depth_empty.
*
* @deprecated Provided for backward compatibility with the 1.4 API.
*
@@ -396,7 +396,7 @@ svn_subst_copy_and_translate(const char *src,
* parameters @a *eol_str, @a repair, @a *keywords and @a expand are
* defined the same as in svn_subst_translate_stream3().
*
- * If @a special is TRUE, then the stream should define a special fine,
+ * If @a special is TRUE, then the stream should define a special file,
* and be in "normal form". The file @a dst will then be a special file.
*
* The contents will be copied/translated into a temporary file, and then
@@ -297,7 +297,7 @@ svn_client_commit3(svn_commit_info_t **commit_info_p,
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- svn_depth_t depth = SVN_DEPTH_INFINITY_OR_FILES(recurse);
+ svn_depth_t depth = SVN_DEPTH_INFINITY_OR_EMPTY(recurse);
return svn_client_commit4(commit_info_p, targets, depth, keep_locks,
FALSE, NULL, NULL, ctx, pool);
@@ -926,7 +926,7 @@ write_format(const char *path, int format, int max_files_per_dir,
SVN_ERR_ASSERT(1 <= format && format <= SVN_FS_FS__FORMAT_NUMBER);
- sb = svn_stringbuf_create(apr_psprintf(pool, "%d\n", format), pool);
+ sb = svn_stringbuf_createf(pool, "%d\n", format);
if (format >= SVN_FS_FS__MIN_LAYOUT_FORMAT_OPTION_FORMAT)
{
@@ -934,7 +934,7 @@ write_format(const char *path, int format, int max_files_per_dir,
svn_stringbuf_appendcstr(sb, apr_psprintf(pool, "layout sharded %d\n",
max_files_per_dir));
else
- svn_stringbuf_appendcstr(sb, "layout linear");
+ svn_stringbuf_appendcstr(sb, "layout linear\n");
}
contents = svn_string_create_from_buf(sb, pool);
@@ -2369,8 +2369,8 @@ svn_fs_fs__rev_get_root(svn_fs_id_t **root_id_p,
SVN_ERR(ensure_revision_exists(fs, rev, pool));
- SVN_ERR(svn_cache__get((void **) root_id_p, &is_cached, ffd->rev_root_id_cache,
- &rev, pool));
+ SVN_ERR(svn_cache__get((void **) root_id_p, &is_cached,
+ ffd->rev_root_id_cache, &rev, pool));
if (is_cached)
return SVN_NO_ERROR;
@@ -336,7 +336,7 @@ svn_ra_serf__conn_closed(serf_connection_t *conn,
if (why)
{
- SVN_ERR_MALFUNCTION();
+ SVN_ERR_MALFUNCTION_NO_RETURN();
}
if (our_conn->using_ssl)
@@ -1018,7 +1018,7 @@ svn_ra_serf__handle_xml_parser(serf_request_t *request,
if (sl.code == 404 && ctx->ignore_errors == FALSE)
{
/* If our caller won't know about the 404, abort() for now. */
- SVN_ERR_ASSERT(ctx->status_code);
+ SVN_ERR_ASSERT_NO_RETURN(ctx->status_code);
if (*ctx->done == FALSE)
{
@@ -1059,7 +1059,7 @@ svn_ra_serf__handle_xml_parser(serf_request_t *request,
{
XML_ParserFree(ctx->xmlp);
- SVN_ERR_ASSERT(ctx->status_code);
+ SVN_ERR_ASSERT_NO_RETURN(ctx->status_code);
if (*ctx->done == FALSE)
{
#include "svn_types.h"
#include "svn_error.h"
#include "svn_auth.h"
+#include "svn_config.h"
#include "svn_private_config.h"
#include "svn_dso.h"
@@ -478,79 +479,129 @@ svn_auth_get_platform_specific_provider(svn_auth_provider_object_t **provider,
svn_error_t *
svn_auth_get_platform_specific_client_providers(apr_array_header_t **providers,
+ svn_config_t *config,
apr_pool_t *pool)
{
svn_auth_provider_object_t *provider;
+ const char *password_stores_config_option;
+ apr_array_header_t *password_stores;
+ int i;
+
+ if (config)
+ {
+ svn_config_get(config,
+ &password_stores_config_option,
+ SVN_CONFIG_SECTION_AUTH,
+ SVN_CONFIG_OPTION_PASSWORD_STORES,
+ "gnome-keyring,kwallet,keychain,windows-cryptoapi");
+ }
+ else
+ {
+ password_stores_config_option = "gnome-keyring,kwallet,keychain,windows-cryptoapi";
+ }
*providers = apr_array_make(pool, 12, sizeof(svn_auth_provider_object_t *));
- /* Gnome Keyring */
- SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
- "gnome_keyring",
- "simple",
- pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
- "gnome_keyring",
- "ssl_client_cert_pw",
- pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- /* Kwallet */
- SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
- "kwallet",
- "simple",
- pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
- "kwallet",
- "ssl_client_cert_pw",
- pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- /* Keychain */
- SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
- "keychain",
- "simple",
- pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
- "keychain",
- "ssl_client_cert_pw",
- pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- /* Windows */
- SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
- "windows",
- "simple",
- pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
-
- SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
- "windows",
- "ssl_client_cert_pw",
- pool));
-
- if (provider)
- APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+ password_stores
+ = svn_cstring_split(password_stores_config_option, " ,", TRUE, pool);
+
+ for (i = 0; i < password_stores->nelts; i++)
+ {
+ const char *password_store = APR_ARRAY_IDX(password_stores, i,
+ const char *);
+
+
+ /* GNOME Keyring */
+ if (apr_strnatcmp(password_store, "gnome-keyring") == 0)
+ {
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "gnome_keyring",
+ "simple",
+ pool));
+
+ if (provider)
+ APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "gnome_keyring",
+ "ssl_client_cert_pw",
+ pool));
+
+ if (provider)
+ APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+ continue;
+ }
+
+ /* KWallet */
+ if (apr_strnatcmp(password_store, "kwallet") == 0)
+ {
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "kwallet",
+ "simple",
+ pool));
+
+ if (provider)
+ APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "kwallet",
+ "ssl_client_cert_pw",
+ pool));
+ if (provider)
+ APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+ continue;
+ }
+
+ /* Keychain */
+ if (apr_strnatcmp(password_store, "keychain") == 0)
+ {
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "keychain",
+ "simple",
+ pool));
+
+ if (provider)
+ APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "keychain",
+ "ssl_client_cert_pw",
+ pool));
+
+ if (provider)
+ APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+ continue;
+ }
+
+ /* Windows */
+ if (apr_strnatcmp(password_store, "windows-cryptoapi") == 0)
+ {
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider,
+ "windows",
+ "simple",
+ pool));
+
+ if (provider)
+ APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+ SVN_ERR(svn_auth_get_platform_specific_provider(&provider, "windows",
+ "ssl_client_cert_pw",
+ pool));
+
+ if (provider)
+ APR_ARRAY_PUSH(*providers, svn_auth_provider_object_t *) = provider;
+
+ continue;
+ }
+
+ return svn_error_createf(SVN_ERR_BAD_CONFIG_VALUE, NULL,
+ _("Invalid config: unknown password store "
+ "'%s'"),
+ password_store);
+ }
return SVN_NO_ERROR;
}
@@ -410,7 +410,9 @@ svn_cmdline_create_auth_baton(svn_auth_baton_t **ab,
apr_array_header_t *providers;
/* Populate the registered providers with the platform-specific providers */
- SVN_ERR(svn_auth_get_platform_specific_client_providers(&providers, pool));
+ SVN_ERR(svn_auth_get_platform_specific_client_providers(&providers,
+ cfg,
+ pool));
/* If we have a cancellation function, cram it and the stuff it
needs into the prompt baton. */
@@ -1500,11 +1500,9 @@ log_do_add_tree_conflict(struct log_runner *loggy,
{
apr_array_header_t *new_conflicts;
const svn_wc_conflict_description_t *new_conflict;
- const char* dir_path =svn_wc_adm_access_path(loggy->adm_access);
+ const char *dir_path = svn_wc_adm_access_path(loggy->adm_access);
/* Convert the text data to a conflict. */
- new_conflict = apr_pcalloc(loggy->pool,
- sizeof(svn_wc_conflict_description_t *));
new_conflicts = apr_array_make(loggy->pool, 1,
sizeof(svn_wc_conflict_description_t *));
SVN_ERR(svn_wc__read_tree_conflicts(&new_conflicts,
@@ -1521,7 +1519,7 @@ log_do_add_tree_conflict(struct log_runner *loggy,
return svn_error_create(SVN_ERR_WC_CORRUPT, NULL,
_("Attempt to add tree conflict that already exists"));
- /* Copy the new conflict to to the result pool. Add its pointer to
+ /* Copy the new conflict to the result pool. Add its pointer to
the array of existing conflicts. */
APR_ARRAY_PUSH(loggy->tree_conflicts,
const svn_wc_conflict_description_t *) =
@@ -219,16 +219,11 @@ struct edit_baton
svn_wc_get_file_t fetch_func;
void *fetch_baton;
- /* Paths that were skipped during the edit, and therefore shouldn't
+ /* Subtrees that were skipped during the edit, and therefore shouldn't
have their revision/url info updated at the end. If a path is a
directory, its descendants will also be skipped. The keys are
pathnames and the values unspecified. */
- apr_hash_t *skipped_paths;
-
- /* Path of the tree- or prop-conflicted directory, if the edit is
- currently inside a conflicted tree. NULL if the edit is not
- inside a conflicted tree. */
- const char *current_conflict;
+ apr_hash_t *skipped_trees;
apr_pool_t *pool;
};
@@ -236,16 +231,33 @@ struct edit_baton
/* Record in the edit baton EB that PATH's base version is not being updated.
*
- * Add to EB->skipped_paths a copy (allocated in EB->pool) of the string
+ * Add to EB->skipped_trees a copy (allocated in EB->pool) of the string
* PATH.
*/
static void
-remember_skipped_path(struct edit_baton *eb, const char *path)
+remember_skipped_tree(struct edit_baton *eb, const char *path)
{
- apr_hash_set(eb->skipped_paths, apr_pstrdup(eb->pool, path),
+ apr_hash_set(eb->skipped_trees, apr_pstrdup(eb->pool, path),
APR_HASH_KEY_STRING, (void*)1);
}
+/* Return TRUE if PATH or any of its ancestor is in the set of skipped
+ * trees, otherwise return FALSE. Use SCRATCH_POOL for allocations. */
+static svn_boolean_t
+in_skipped_tree(struct edit_baton *eb,
+ const char *path,
+ apr_pool_t *scratch_pool)
+{
+ while (! svn_path_is_empty(path))
+ {
+ if (apr_hash_get(eb->skipped_trees, path, APR_HASH_KEY_STRING))
+ return TRUE;
+
+ path = svn_path_dirname(path, scratch_pool);
+ }
+
+ return FALSE;
+}
struct dir_baton
{
@@ -582,7 +594,7 @@ complete_directory(struct edit_baton *eb,
const char *name;
/* If inside a tree conflict, do nothing. */
- if (eb->current_conflict)
+ if (in_skipped_tree(eb, path, pool))
return SVN_NO_ERROR;
/* If this is the root directory and there is a target, we can't
@@ -1264,24 +1276,30 @@ static svn_error_t *
entry_has_local_mods(svn_boolean_t *modified,
svn_wc_adm_access_t *adm_access,
svn_node_kind_t kind,
+ svn_wc_schedule_t schedule,
const char *full_path,
apr_pool_t *pool)
{
- svn_boolean_t text_modified;
- svn_boolean_t props_modified;
-
- /* Check for text modifications */
- if (kind == svn_node_file)
- SVN_ERR(svn_wc_text_modified_p(&text_modified, full_path, FALSE,
- adm_access, pool));
+ if (schedule != svn_wc_schedule_normal)
+ *modified = TRUE;
else
- text_modified = FALSE;
+ {
+ svn_boolean_t text_modified;
+ svn_boolean_t props_modified;
+
+ /* Check for text modifications */
+ if (kind == svn_node_file)
+ SVN_ERR(svn_wc_text_modified_p(&text_modified, full_path, FALSE,
+ adm_access, pool));
+ else
+ text_modified = FALSE;
- /* Check for property modifications */
- SVN_ERR(svn_wc_props_modified_p(&props_modified, full_path,
- adm_access, pool));
+ /* Check for property modifications */
+ SVN_ERR(svn_wc_props_modified_p(&props_modified, full_path,
+ adm_access, pool));
- *modified = (text_modified || props_modified);
+ *modified = (text_modified || props_modified);
+ }
return SVN_NO_ERROR;
}
@@ -1321,7 +1339,9 @@ modcheck_found_entry(const char *path,
return err;
}
- SVN_ERR(entry_has_local_mods(&modified, adm_access, entry->kind, path, pool));
+ SVN_ERR(entry_has_local_mods(&modified, adm_access, entry->kind,
+ entry->schedule, path, pool));
+
if (modified)
baton->found_mod = TRUE;
@@ -1442,7 +1462,8 @@ check_tree_conflict(svn_wc_conflict_description_t **pconflict,
/* Use case 2: Deleting a locally-modified item. */
if (entry->kind == svn_node_file)
SVN_ERR(entry_has_local_mods(&modified, parent_adm_access,
- entry->kind, full_path, pool));
+ entry->kind, entry->schedule,
+ full_path, pool));
else if (entry->kind == svn_node_dir)
{
@@ -1686,15 +1707,8 @@ do_entry_deletion(struct edit_baton *eb,
/* Is an ancestor-dir (already visited by this edit) a tree conflict
victim? If so, skip without notification. */
- if (eb->current_conflict)
- {
- SVN_ERR_ASSERT(svn_path_is_ancestor(eb->current_conflict,
- full_path));
-
- remember_skipped_path(eb, full_path);
-
- return SVN_NO_ERROR;
- }
+ if (in_skipped_tree(eb, full_path, pool))
+ return SVN_NO_ERROR;
/* Is this path, or an ancestor-dir NOT visited by this edit, already
marked as a tree conflict victim? */
@@ -1719,7 +1733,7 @@ do_entry_deletion(struct edit_baton *eb,
if (victim_path != NULL || tree_conflict != NULL)
{
- remember_skipped_path(eb, full_path);
+ remember_skipped_tree(eb, full_path);
/* ### TODO: Also print victim_path in the skip msg. */
if (eb->notify_func)
@@ -1924,15 +1938,8 @@ add_directory(const char *path,
/* Is an ancestor-dir (already visited by this edit) a tree conflict
victim? If so, skip without notification. */
- if (eb->current_conflict)
- {
- SVN_ERR_ASSERT(svn_path_is_ancestor(eb->current_conflict,
- full_path));
-
- remember_skipped_path(eb, full_path);
-
- return SVN_NO_ERROR;
- }
+ if (in_skipped_tree(eb, full_path, pool))
+ return SVN_NO_ERROR;
/* Is this path, or an ancestor-dir NOT visited by this edit, already
marked as a tree conflict victim? */
@@ -1942,8 +1949,7 @@ add_directory(const char *path,
if (victim_path != NULL)
{
/* Record this conflict so that its descendants are skipped silently. */
- eb->current_conflict = victim_path;
- remember_skipped_path(eb, full_path);
+ remember_skipped_tree(eb, full_path);
/* ### TODO: Also print victim_path in the skip msg. */
if (eb->notify_func)
@@ -2037,11 +2043,9 @@ add_directory(const char *path,
if (tree_conflict != NULL)
{
- /* Record this conflict so that its descendants are skipped silently. */
- eb->current_conflict = apr_pstrdup(pool,
- tree_conflict->path);
-
- remember_skipped_path(eb, full_path);
+ /* Record this conflict so that its descendants are
+ skipped silently. */
+ remember_skipped_tree(eb, full_path);
/* ### TODO: Also print victim_path in the skip msg. */
if (eb->notify_func)
@@ -2229,13 +2233,9 @@ open_directory(const char *path,
/* Is an ancestor-dir (already visited by this edit) a tree conflict
victim? If so, skip the tree without notification. */
- if (eb->current_conflict)
+ if (in_skipped_tree(eb, full_path, pool))
{
- SVN_ERR_ASSERT(svn_path_is_ancestor(eb->current_conflict,
- full_path));
-
db->bump_info->skipped = TRUE;
- remember_skipped_path(eb, full_path);
return SVN_NO_ERROR;
}
@@ -2246,10 +2246,7 @@ open_directory(const char *path,
eb->cancel_baton, pool));
if (victim_path != NULL)
- {
- eb->current_conflict = victim_path;
- tree_conflict = NULL;
- }
+ tree_conflict = NULL;
else
/* Is this path a fresh tree conflict victim? If so, skip the tree
with one notification. */
@@ -2262,13 +2259,10 @@ open_directory(const char *path,
SVN_ERR(svn_wc_conflicted_p2(NULL, &prop_conflicted, NULL, full_path,
adm_access, pool));
- if (tree_conflict != NULL || prop_conflicted)
- eb->current_conflict = full_path;
-
if (victim_path != NULL || tree_conflict != NULL || prop_conflicted)
{
db->bump_info->skipped = TRUE;
- remember_skipped_path(eb, full_path);
+ remember_skipped_tree(eb, full_path);
if (eb->notify_func)
{
@@ -2386,16 +2380,12 @@ close_directory(void *dir_baton,
apr_hash_t *base_props = NULL, *working_props = NULL;
svn_wc_adm_access_t *adm_access;
- /* Skip if we're in a conflicted tree. Remove the tree-conflict flag if
- we're closing the victim directory. */
- if (db->edit_baton->current_conflict)
+ /* Skip if we're in a conflicted tree. */
+ if (in_skipped_tree(db->edit_baton, db->path, pool))
{
/* Allow the parent to complete its update. */
SVN_ERR(maybe_bump_dir_info(db->edit_baton, db->bump_info, db->pool));
- if (strcmp(db->edit_baton->current_conflict, db->path) == 0)
- db->edit_baton->current_conflict = NULL;
-
return SVN_NO_ERROR;
}
@@ -3024,13 +3014,9 @@ add_file(const char *path,
/* Is an ancestor-dir (already visited by this edit) a tree conflict
victim? If so, skip without notification. */
- if (eb->current_conflict)
+ if (in_skipped_tree(eb, full_path, pool))
{
- SVN_ERR_ASSERT(svn_path_is_ancestor(eb->current_conflict,
- full_path));
-
fb->skipped = TRUE;
- remember_skipped_path(eb, full_path);
return SVN_NO_ERROR;
}
@@ -3062,7 +3048,7 @@ add_file(const char *path,
if (victim_path != NULL || tree_conflict != NULL)
{
fb->skipped = TRUE;
- remember_skipped_path(eb, full_path);
+ remember_skipped_tree(eb, full_path);
/* ### TODO: Also print victim_path in the skip msg. */
if (eb->notify_func)
@@ -3199,13 +3185,9 @@ open_file(const char *path,
/* Is an ancestor-dir (already visited by this edit) a tree conflict
victim? If so, skip without notification. */
- if (eb->current_conflict)
+ if (in_skipped_tree(eb, full_path, pool))
{
- SVN_ERR_ASSERT(svn_path_is_ancestor(eb->current_conflict,
- full_path));
-
fb->skipped = TRUE;
- remember_skipped_path(eb, full_path);
return SVN_NO_ERROR;
}
@@ -3232,7 +3214,7 @@ open_file(const char *path,
|| prop_conflicted)
{
fb->skipped = TRUE;
- remember_skipped_path(eb, full_path);
+ remember_skipped_tree(eb, full_path);
/* ### TODO: Also print victim_path in the t-c skip msg. */
if (eb->notify_func)
@@ -4130,7 +4112,7 @@ close_edit(void *edit_baton,
*(eb->target_revision),
eb->notify_func,
eb->notify_baton,
- TRUE, eb->skipped_paths,
+ TRUE, eb->skipped_trees,
eb->pool));
/* The edit is over, free its pool.
@@ -4221,9 +4203,8 @@ make_editor(svn_revnum_t *target_revision,
eb->fetch_func = fetch_func;
eb->fetch_baton = fetch_baton;
eb->allow_unver_obstructions = allow_unver_obstructions;
- eb->skipped_paths = apr_hash_make(subpool);
+ eb->skipped_trees = apr_hash_make(subpool);
eb->ext_patterns = preserved_exts;
- eb->current_conflict = NULL;
/* Construct an editor. */
tree_editor->set_target_revision = set_target_revision;
@@ -38,8 +38,8 @@ msgid ""
msgstr ""
"Project-Id-Version: subversion 1.6\n"
"Report-Msgid-Bugs-To:
[email protected]\n"
-"POT-Creation-Date: 2008-11-23 20:00+0100\n"
-"PO-Revision-Date: 2008-11-23 20:00+0100\n"
+"POT-Creation-Date: 2008-11-30 02:00+0100\n"
+"PO-Revision-Date: 2008-11-30 02:00+0100\n"
"Last-Translator: Subversion Developers <
[email protected]>\n"
"Language-Team: Polish <
[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -1411,7 +1411,7 @@ msgstr "'%s' leży w miejscu pliku podlegającego zarządzaniu wersjami"
#: ../libsvn_client/delete.c:56 ../libsvn_wc/adm_ops.c:3131
#: ../libsvn_wc/entries.c:1519 ../libsvn_wc/entries.c:2673
-#: ../libsvn_wc/entries.c:3291 ../libsvn_wc/update_editor.c:3597
+#: ../libsvn_wc/entries.c:3291 ../libsvn_wc/update_editor.c:3689
#, c-format
msgid "'%s' is not under version control"
msgstr "'%s' nie podlega zarządzaniu wersjami"
@@ -1480,8 +1480,8 @@ msgstr "%s\t(kopia robocza)"
msgid "Cannot display: file marked as a binary type.%s"
msgstr "Nie można wyświetlić: plik binarny.%s"
-#: ../libsvn_client/diff.c:924 ../libsvn_client/merge.c:4805
-#: ../libsvn_client/merge.c:6502
+#: ../libsvn_client/diff.c:924 ../libsvn_client/merge.c:4886
+#: ../libsvn_client/merge.c:6584
msgid "Not all required revisions are specified"
msgstr "Nie wszystkie wymagane wersje zostały podane"
@@ -1531,7 +1531,7 @@ msgid "'%s' already exists"
msgstr "'%s' już istnieje"
#: ../libsvn_client/export.c:735 ../libsvn_wc/adm_crawler.c:959
-#: ../libsvn_wc/update_editor.c:3283 ../libsvn_wc/update_editor.c:3949
+#: ../libsvn_wc/update_editor.c:3375 ../libsvn_wc/update_editor.c:4042
#, c-format
msgid "Checksum mismatch for '%s'; expected: '%s', actual: '%s'"
msgstr "Błąd sumy kontrolnej dla '%s'; oczekiwana: '%s', faktyczna: '%s'"
@@ -1616,9 +1616,9 @@ msgstr "URL '%s' nie istnieje w tej wersji"
msgid "No common parent found, unable to operate on disjoint arguments"
msgstr "Nie znaleziono wspólnego rodzica, nie można użyć rozłącznych argumentów"
-#: ../libsvn_client/locking_commands.c:265 ../libsvn_client/merge.c:6519
-#: ../libsvn_client/merge.c:6525 ../libsvn_client/merge.c:7426
-#: ../libsvn_client/merge.c:7610 ../libsvn_client/ra.c:400
+#: ../libsvn_client/locking_commands.c:265 ../libsvn_client/merge.c:6601
+#: ../libsvn_client/merge.c:6607 ../libsvn_client/merge.c:7508
+#: ../libsvn_client/merge.c:7692 ../libsvn_client/ra.c:400
#: ../libsvn_client/ra.c:432 ../libsvn_client/ra.c:635
#, c-format
msgid "'%s' has no URL"
@@ -1675,25 +1675,25 @@ msgstr "Łączenie różnych schematów dostępu nie jest obsługiwane ('%s' i '
#. xgettext: the '.working', '.merge-left.r%ld' and
#. '.merge-right.r%ld' strings are used to tag onto a file
#. name in case of a merge conflict
-#: ../libsvn_client/merge.c:1081
+#: ../libsvn_client/merge.c:1126
msgid ".working"
msgstr ".robocza"
-#: ../libsvn_client/merge.c:1083
+#: ../libsvn_client/merge.c:1128
#, c-format
msgid ".merge-left.r%ld"
msgstr ".merge-lewo.w%ld"
-#: ../libsvn_client/merge.c:1086
+#: ../libsvn_client/merge.c:1131
#, c-format
msgid ".merge-right.r%ld"
msgstr ".merge-prawo.w%ld"
-#: ../libsvn_client/merge.c:2763
+#: ../libsvn_client/merge.c:2798
msgid "Cannot reverse-merge a range from a path's own future history; try updating first"
msgstr "Nie można połączyć odwróconych zmian z własnej przyszłości ścieżki. Spróbuj najpierw zaktualizować kopię roboczą"
-#: ../libsvn_client/merge.c:3254
+#: ../libsvn_client/merge.c:3335
#, c-format
msgid ""
"One or more conflicts were produced while merging r%ld:%ld into\n"
@@ -1706,50 +1706,50 @@ msgstr ""
"rozwiąż wszystkie konflikty i uruchom merge ponownie, by zastosować\n"
"pozostałe wersje"
-#: ../libsvn_client/merge.c:6201
+#: ../libsvn_client/merge.c:6283
msgid "Use of two URLs is not compatible with mergeinfo modification"
msgstr "Użycie dwu URL-i jest niekompatybilne z modyfikacją informacji o połączeniach zmian"
-#: ../libsvn_client/merge.c:6208 ../libsvn_client/merge.c:6438
+#: ../libsvn_client/merge.c:6290 ../libsvn_client/merge.c:6520
msgid "Merge from foreign repository is not compatible with mergeinfo modification"
msgstr "Łączenie zmian z zewnętrznego repozytorium jest niekompatybilne z modyfikacją informacji o połączeniach zmian"
-#: ../libsvn_client/merge.c:6717
+#: ../libsvn_client/merge.c:6799
msgid "Cannot reintegrate into a working copy with a switched subtree"
msgstr "Nie można reintegrować do kopii roboczej z przełączonym poddrzewem"
-#: ../libsvn_client/merge.c:6722
+#: ../libsvn_client/merge.c:6804
msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
msgstr "Nie można reintegrować do kopii roboczej z niecałkowicie nieskończoną głębokością"
-#: ../libsvn_client/merge.c:6727
+#: ../libsvn_client/merge.c:6809
msgid "Cannot reintegrate into a working copy that has local modifications"
msgstr "Nie można reintegrować do kopii roboczej posiadającej lokalne modyfikacje"
-#: ../libsvn_client/merge.c:6733
+#: ../libsvn_client/merge.c:6815
msgid "Cannot determine revision of working copy"
msgstr "Nie można określić wersji kopii roboczej"
-#: ../libsvn_client/merge.c:6737
+#: ../libsvn_client/merge.c:6819
msgid "Cannot reintegrate into mixed-revision working copy; try updating first"
msgstr "Nie można reintegrować do kopii roboczej z mieszanymi wersjami. Spróbuj najpierw zaktualizować kopię roboczą"
-#: ../libsvn_client/merge.c:6816
+#: ../libsvn_client/merge.c:6898
#, c-format
msgid "At least one revision (r%ld) not yet merged from '%s'"
msgstr "Przynajmniej jedna wersja (r%ld) niepołączona jeszcze z '%s'"
-#: ../libsvn_client/merge.c:7291 ../libsvn_client/merge.c:7497
+#: ../libsvn_client/merge.c:7373 ../libsvn_client/merge.c:7579
#, c-format
msgid "'%s@%ld' must be ancestrally related to '%s@%ld'"
msgstr "'%s@%ld' musi być spokrewnione z '%s@%ld'"
-#: ../libsvn_client/merge.c:7444
+#: ../libsvn_client/merge.c:7526
#, c-format
msgid "'%s' must be from the same repository as '%s'"
msgstr "'%s' musi być z tego samego repozytorium co '%s'"
-#: ../libsvn_client/merge.c:7521
+#: ../libsvn_client/merge.c:7603
#, c-format
msgid ""
"Reintegrate can only be used if revisions %ld through %ld were previously merged from %s to the reintegrate source, but this is not the case:\n"
@@ -1863,7 +1863,7 @@ msgid "Cannot both exclude and switch a path"
msgstr "Nie można zarówno wykluczyć, jak i przełączyć ścieżki"
#: ../libsvn_client/switch.c:170 ../libsvn_ra_local/ra_plugin.c:193
-#: ../libsvn_ra_local/ra_plugin.c:268 ../libsvn_wc/update_editor.c:4108
+#: ../libsvn_ra_local/ra_plugin.c:268 ../libsvn_wc/update_editor.c:4206
#, c-format
msgid ""
"'%s'\n"
@@ -2034,17 +2034,17 @@ msgstr "tworzenie zmiany"
msgid "deleting changes"
msgstr "usuwanie zmian"
-#: ../libsvn_fs_base/bdb/changes-table.c:143 ../libsvn_fs_fs/fs_fs.c:3335
+#: ../libsvn_fs_base/bdb/changes-table.c:143 ../libsvn_fs_fs/fs_fs.c:3346
msgid "Missing required node revision ID"
msgstr "Brak wymaganego ID wersji obiektu"
-#: ../libsvn_fs_base/bdb/changes-table.c:154 ../libsvn_fs_fs/fs_fs.c:3345
+#: ../libsvn_fs_base/bdb/changes-table.c:154 ../libsvn_fs_fs/fs_fs.c:3356
msgid "Invalid change ordering: new node revision ID without delete"
msgstr ""
"Niewłaściwy porządek zmian: ID nowego węzła wersji nie jest\n"
"zmianą typu usunięcie ścieżki"
-#: ../libsvn_fs_base/bdb/changes-table.c:164 ../libsvn_fs_fs/fs_fs.c:3356
+#: ../libsvn_fs_base/bdb/changes-table.c:164 ../libsvn_fs_fs/fs_fs.c:3367
msgid "Invalid change ordering: non-add change on deleted path"
msgstr ""
"Niewłaściwy porządek zmian: zmiana typu non-add poprzedza\n"
@@ -2617,7 +2617,7 @@ msgid "Conflict at '%s'"
msgstr "Konflikt z '%s'"
#: ../libsvn_fs_base/tree.c:2022 ../libsvn_fs_base/tree.c:2773
-#: ../libsvn_fs_fs/tree.c:1222 ../libsvn_fs_fs/tree.c:1775
+#: ../libsvn_fs_fs/tree.c:1222 ../libsvn_fs_fs/tree.c:1773
msgid "Bad merge; ancestor, source, and target not all in same fs"
msgstr "Złe łączenie; przodek, źródłowy obiekt i docelowy obiekt nie mają tego samego typu systemu plików"
@@ -2636,20 +2636,20 @@ msgstr "Transakcja '%s' jest nieaktualna względem wersji '%s'"
msgid "Cannot deltify revisions prior to r%ld"
msgstr "Nie można zdeltyfikować wersji wcześniejszych od r%ld"
-#: ../libsvn_fs_base/tree.c:2974 ../libsvn_fs_fs/tree.c:1910
+#: ../libsvn_fs_base/tree.c:2974 ../libsvn_fs_fs/tree.c:1908
msgid "The root directory cannot be deleted"
msgstr "Katalog główny nie może zostać usunięty"
-#: ../libsvn_fs_base/tree.c:3193 ../libsvn_fs_fs/tree.c:1991
+#: ../libsvn_fs_base/tree.c:3193 ../libsvn_fs_fs/tree.c:1989
#, c-format
msgid "Cannot copy between two different filesystems ('%s' and '%s')"
msgstr "Nie można porównać pomiędzy dwoma różnymi systemami plików ('%s' i '%s')"
-#: ../libsvn_fs_base/tree.c:3202 ../libsvn_fs_fs/tree.c:1997
+#: ../libsvn_fs_base/tree.c:3202 ../libsvn_fs_fs/tree.c:1995
msgid "Copy from mutable tree not currently supported"
msgstr "Kopiowanie ze zmiennego drzewa nie jest obecnie obsługiwane"
-#: ../libsvn_fs_base/tree.c:3701 ../libsvn_fs_fs/tree.c:2444
+#: ../libsvn_fs_base/tree.c:3701 ../libsvn_fs_fs/tree.c:2442
#, c-format
msgid ""
"Base checksum mismatch on '%s':\n"
@@ -2660,12 +2660,12 @@ msgstr ""
" oczekiwano: %s\n"
" wyliczono: %s\n"
-#: ../libsvn_fs_base/tree.c:3951 ../libsvn_fs_fs/tree.c:2676
+#: ../libsvn_fs_base/tree.c:3951 ../libsvn_fs_fs/tree.c:2674
msgid "Cannot compare file contents between two different filesystems"
msgstr "Nie można porównać zawartości pliku w dwóch różnych systemach plików"
#: ../libsvn_fs_base/tree.c:3960 ../libsvn_fs_base/tree.c:3965
-#: ../libsvn_fs_fs/tree.c:2685 ../libsvn_fs_fs/tree.c:2690
+#: ../libsvn_fs_fs/tree.c:2683 ../libsvn_fs_fs/tree.c:2688
#: ../libsvn_ra/compat.c:676
#, c-format
msgid "'%s' is not a file"
@@ -2710,33 +2710,33 @@ msgstr ""
" oczekiwano: %s\n"
" wyliczono: %s\n"
-#: ../libsvn_fs_fs/dag.c:1120
+#: ../libsvn_fs_fs/dag.c:1122
msgid "Empty noderev in cache"
msgstr "Pusty rodzaj węzła w schowku pamięciowym"
-#: ../libsvn_fs_fs/dag.c:1130
+#: ../libsvn_fs_fs/dag.c:1132
msgid "Kindless noderev in cache"
msgstr "Nieprawidłowy rodzaj węzła w schowku pamięciowym"
-#: ../libsvn_fs_fs/dag.c:1137
+#: ../libsvn_fs_fs/dag.c:1139
#, c-format
msgid "Unknown kind for noderev in cache: '%c'"
msgstr "Nieznany rodzaj węzła w schowku pamięciowym: '%c'"
-#: ../libsvn_fs_fs/dag.c:1144
+#: ../libsvn_fs_fs/dag.c:1146
msgid "Unterminated ID in cache"
msgstr "Niezakończony ID w schowku pamięciowym"
-#: ../libsvn_fs_fs/dag.c:1149
+#: ../libsvn_fs_fs/dag.c:1151
#, c-format
msgid "Bogus ID '%s' in cache"
msgstr "Niepoprawny ID '%s' w schowku pamięciowym"
-#: ../libsvn_fs_fs/dag.c:1156
+#: ../libsvn_fs_fs/dag.c:1158
msgid "No created path"
msgstr "Brak utworzonej ścieżki"
-#: ../libsvn_fs_fs/dag.c:1182
+#: ../libsvn_fs_fs/dag.c:1184
#, c-format
msgid "Unknown node type in cache: '%c'"
msgstr "Nieznany rodzaj obiektu w schowku pamięciowym: '%c'"
@@ -2850,104 +2850,104 @@ msgstr "Nie można odczytać pierwszej linii z formatowego pliku '%s'"
msgid "'%s' contains invalid filesystem format option '%s'"
msgstr "'%s' zawiera niepoprawną opcję '%s' formatu systemu plików"
-#: ../libsvn_fs_fs/fs_fs.c:964
+#: ../libsvn_fs_fs/fs_fs.c:961
#, c-format
msgid "Expected FS format between '1' and '%d'; found format '%d'"
msgstr "Oczekiwany format systemu plików pomiędzy '1' a '%d'; znaleziony format '%d'"
-#: ../libsvn_fs_fs/fs_fs.c:1454 ../libsvn_fs_fs/fs_fs.c:1468
+#: ../libsvn_fs_fs/fs_fs.c:1451 ../libsvn_fs_fs/fs_fs.c:1465
msgid "Found malformed header in revision file"
msgstr "Błędny nagłówek w pliku wersji"
-#: ../libsvn_fs_fs/fs_fs.c:1502
+#: ../libsvn_fs_fs/fs_fs.c:1499
#, c-format
msgid "Invalid revision number '%ld'"
msgstr "Nieprawidłowy numer wersji '%ld'"
-#: ../libsvn_fs_fs/fs_fs.c:1517 ../libsvn_fs_fs/fs_fs.c:2206
-#: ../libsvn_fs_fs/fs_fs.c:2286 ../libsvn_repos/log.c:1622
+#: ../libsvn_fs_fs/fs_fs.c:1514 ../libsvn_fs_fs/fs_fs.c:2214
+#: ../libsvn_fs_fs/fs_fs.c:2294 ../libsvn_repos/log.c:1622
#: ../libsvn_repos/log.c:1626
#, c-format
msgid "No such revision %ld"
msgstr "Nie ma takiej wersji %ld"
-#: ../libsvn_fs_fs/fs_fs.c:1609 ../libsvn_fs_fs/fs_fs.c:1623
-#: ../libsvn_fs_fs/fs_fs.c:1630 ../libsvn_fs_fs/fs_fs.c:1637
-#: ../libsvn_fs_fs/fs_fs.c:1645 ../libsvn_fs_fs/fs_fs.c:1659
+#: ../libsvn_fs_fs/fs_fs.c:1606 ../libsvn_fs_fs/fs_fs.c:1620
+#: ../libsvn_fs_fs/fs_fs.c:1627 ../libsvn_fs_fs/fs_fs.c:1634
+#: ../libsvn_fs_fs/fs_fs.c:1642 ../libsvn_fs_fs/fs_fs.c:1655
msgid "Malformed text rep offset line in node-rev"
msgstr "Błędny offset reprezentacji w node-rev"
-#: ../libsvn_fs_fs/fs_fs.c:1731
+#: ../libsvn_fs_fs/fs_fs.c:1727
msgid "Missing id field in node-rev"
msgstr "Brak pola id w node-rev"
-#: ../libsvn_fs_fs/fs_fs.c:1743
+#: ../libsvn_fs_fs/fs_fs.c:1739
msgid "Missing kind field in node-rev"
msgstr "Brak pola kind w node-rev"
-#: ../libsvn_fs_fs/fs_fs.c:1774
+#: ../libsvn_fs_fs/fs_fs.c:1770
msgid "Missing cpath in node-rev"
msgstr "Brak cpath w node-rev"
-#: ../libsvn_fs_fs/fs_fs.c:1801 ../libsvn_fs_fs/fs_fs.c:1807
+#: ../libsvn_fs_fs/fs_fs.c:1797 ../libsvn_fs_fs/fs_fs.c:1803
msgid "Malformed copyroot line in node-rev"
msgstr "Błędna linia copyroot w node-rev"
-#: ../libsvn_fs_fs/fs_fs.c:1825 ../libsvn_fs_fs/fs_fs.c:1831
+#: ../libsvn_fs_fs/fs_fs.c:1821 ../libsvn_fs_fs/fs_fs.c:1827
msgid "Malformed copyfrom line in node-rev"
msgstr "Błędna linia copyfrom w node-rev"
-#: ../libsvn_fs_fs/fs_fs.c:1978 ../libsvn_fs_fs/fs_fs.c:4677
+#: ../libsvn_fs_fs/fs_fs.c:1986 ../libsvn_fs_fs/fs_fs.c:4688
msgid "Attempted to write to non-transaction"
msgstr "Próba zapisu do nietransakcji"
-#: ../libsvn_fs_fs/fs_fs.c:2064
+#: ../libsvn_fs_fs/fs_fs.c:2072
msgid "Malformed representation header"
msgstr "Błędny nagłówek reprezentacji"
-#: ../libsvn_fs_fs/fs_fs.c:2090
+#: ../libsvn_fs_fs/fs_fs.c:2098
msgid "Missing node-id in node-rev"
msgstr "Brak node-id w node-rev"
-#: ../libsvn_fs_fs/fs_fs.c:2096
+#: ../libsvn_fs_fs/fs_fs.c:2104
msgid "Corrupt node-id in node-rev"
msgstr "Błędny node-id w node-rev"
-#: ../libsvn_fs_fs/fs_fs.c:2141
+#: ../libsvn_fs_fs/fs_fs.c:2149
#, c-format
msgid "Revision file lacks trailing newline"
msgstr "W pliku wersji brak końcowego znaku końca wiersza"
-#: ../libsvn_fs_fs/fs_fs.c:2153
+#: ../libsvn_fs_fs/fs_fs.c:2161
#, c-format
msgid "Final line in revision file longer than 64 characters"
msgstr "Ostatnia linia w pliku wersji dłuższa niż 64 znaki"
-#: ../libsvn_fs_fs/fs_fs.c:2168
+#: ../libsvn_fs_fs/fs_fs.c:2176
msgid "Final line in revision file missing space"
msgstr "Brak spacji w ostatniej linii pliku wersji"
-#: ../libsvn_fs_fs/fs_fs.c:2360
+#: ../libsvn_fs_fs/fs_fs.c:2368
msgid "Malformed svndiff data in representation"
msgstr "Błędne dane svndiff w reprezentacji"
-#: ../libsvn_fs_fs/fs_fs.c:2549 ../libsvn_fs_fs/fs_fs.c:2562
+#: ../libsvn_fs_fs/fs_fs.c:2560 ../libsvn_fs_fs/fs_fs.c:2573
msgid "Reading one svndiff window read beyond the end of the representation"
msgstr "Podczas czytania danych okna svndiff przekroczono koniec reprezentacji"
-#: ../libsvn_fs_fs/fs_fs.c:2702
+#: ../libsvn_fs_fs/fs_fs.c:2713
msgid "svndiff data requested non-existent source"
msgstr "Żądane dane svndiff wskazują na nieistniejące źródło"
-#: ../libsvn_fs_fs/fs_fs.c:2708
+#: ../libsvn_fs_fs/fs_fs.c:2719
msgid "svndiff requested position beyond end of stream"
msgstr "Żądana pozycja svndiff jest poza końcem strumienia"
-#: ../libsvn_fs_fs/fs_fs.c:2731 ../libsvn_fs_fs/fs_fs.c:2748
+#: ../libsvn_fs_fs/fs_fs.c:2742 ../libsvn_fs_fs/fs_fs.c:2759
msgid "svndiff window length is corrupt"
msgstr "Błędne okno danych svndiff"
-#: ../libsvn_fs_fs/fs_fs.c:2799
+#: ../libsvn_fs_fs/fs_fs.c:2810
#, c-format
msgid ""
"Checksum mismatch while reading representation:\n"
" oczekiwano: %s\n"
" znaleziono: %s\n"
-#: ../libsvn_fs_fs/fs_fs.c:3101 ../libsvn_fs_fs/fs_fs.c:3114
-#: ../libsvn_fs_fs/fs_fs.c:3120 ../libsvn_fs_fs/fs_fs.c:5844
-#: ../libsvn_fs_fs/fs_fs.c:5853 ../libsvn_fs_fs/fs_fs.c:5859
+#: ../libsvn_fs_fs/fs_fs.c:3112 ../libsvn_fs_fs/fs_fs.c:3125
+#: ../libsvn_fs_fs/fs_fs.c:3131 ../libsvn_fs_fs/fs_fs.c:5855
+#: ../libsvn_fs_fs/fs_fs.c:5864 ../libsvn_fs_fs/fs_fs.c:5870
msgid "Directory entry corrupt"
msgstr "Uszkodzony wpis w katalogu"
-#: ../libsvn_fs_fs/fs_fs.c:3501 ../libsvn_fs_fs/fs_fs.c:3506
-#: ../libsvn_fs_fs/fs_fs.c:3512 ../libsvn_fs_fs/fs_fs.c:3544
-#: ../libsvn_fs_fs/fs_fs.c:3564 ../libsvn_fs_fs/fs_fs.c:3598
-#: ../libsvn_fs_fs/fs_fs.c:3603
+#: ../libsvn_fs_fs/fs_fs.c:3512 ../libsvn_fs_fs/fs_fs.c:3517
+#: ../libsvn_fs_fs/fs_fs.c:3523 ../libsvn_fs_fs/fs_fs.c:3555
+#: ../libsvn_fs_fs/fs_fs.c:3575 ../libsvn_fs_fs/fs_fs.c:3609
+#: ../libsvn_fs_fs/fs_fs.c:3614
msgid "Invalid changes line in rev-file"
msgstr "Niewłaściwa linia zmian w pliku wersji"
-#: ../libsvn_fs_fs/fs_fs.c:3537
+#: ../libsvn_fs_fs/fs_fs.c:3548
msgid "Invalid change kind in rev file"
msgstr "Niewłaściwy rodzaj zmiany w pliku wersji"
-#: ../libsvn_fs_fs/fs_fs.c:3557
+#: ../libsvn_fs_fs/fs_fs.c:3568
msgid "Invalid text-mod flag in rev-file"
msgstr "Niewłaściwa flaga text-mod w pliku wersji"
-#: ../libsvn_fs_fs/fs_fs.c:3577
+#: ../libsvn_fs_fs/fs_fs.c:3588
msgid "Invalid prop-mod flag in rev-file"
msgstr "Niewłaściwa flaga prop-mod w pliku wersji"
-#: ../libsvn_fs_fs/fs_fs.c:3763
+#: ../libsvn_fs_fs/fs_fs.c:3774
msgid "Copying from transactions not allowed"
msgstr "Kopiowanie z transakcji niedozwolone"
-#: ../libsvn_fs_fs/fs_fs.c:3919
+#: ../libsvn_fs_fs/fs_fs.c:3930
#, c-format
msgid "Unable to create transaction directory in '%s' for revision %ld"
msgstr "Nie można utworzyć katalogu transakcji w '%s' dla wersji %ld"
-#: ../libsvn_fs_fs/fs_fs.c:4126 ../libsvn_fs_fs/fs_fs.c:4133
+#: ../libsvn_fs_fs/fs_fs.c:4137 ../libsvn_fs_fs/fs_fs.c:4144
msgid "next-id file corrupt"
msgstr "Plik next-id jest uszkodzony"
-#: ../libsvn_fs_fs/fs_fs.c:4243
+#: ../libsvn_fs_fs/fs_fs.c:4254
msgid "Transaction cleanup failed"
msgstr "Nie powiodło się sprzątanie po transakcji"
-#: ../libsvn_fs_fs/fs_fs.c:4350
+#: ../libsvn_fs_fs/fs_fs.c:4361
msgid "Invalid change type"
msgstr "Niewłaściwy typ zmiany"
-#: ../libsvn_fs_fs/fs_fs.c:4696
+#: ../libsvn_fs_fs/fs_fs.c:4707
msgid "Can't set text contents of a directory"
msgstr "Nie można ustawić tekstowej zawartości katalogu"
-#: ../libsvn_fs_fs/fs_fs.c:4780 ../libsvn_fs_fs/fs_fs.c:4785
-#: ../libsvn_fs_fs/fs_fs.c:4792
+#: ../libsvn_fs_fs/fs_fs.c:4791 ../libsvn_fs_fs/fs_fs.c:4796
+#: ../libsvn_fs_fs/fs_fs.c:4803
msgid "Corrupt current file"
msgstr "Bieżący plik jest uszkodzony"
-#: ../libsvn_fs_fs/fs_fs.c:5100 ../libsvn_subr/io.c:2872 ../svn/util.c:383
+#: ../libsvn_fs_fs/fs_fs.c:5111 ../libsvn_subr/io.c:2872 ../svn/util.c:383
#: ../svn/util.c:398 ../svn/util.c:422
#, c-format
msgid "Can't stat '%s'"
msgstr "Nie można pobrać informacji o '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:5104
+#: ../libsvn_fs_fs/fs_fs.c:5115
#, c-format
msgid "Can't chmod '%s'"
msgstr "Nie można ustawić uprawnień '%s'"
-#: ../libsvn_fs_fs/fs_fs.c:5331
+#: ../libsvn_fs_fs/fs_fs.c:5342
msgid "Transaction out of date"
msgstr "Transakcja jest nieaktualna"
-#: ../libsvn_fs_fs/fs_fs.c:5785
+#: ../libsvn_fs_fs/fs_fs.c:5796
msgid "Recovery encountered a non-directory node"
msgstr "Odzyskiwanie spotkało węzeł niekatalogu"
-#: ../libsvn_fs_fs/fs_fs.c:5807
+#: ../libsvn_fs_fs/fs_fs.c:5818
msgid "Recovery encountered a deltified directory representation"
msgstr "Odzyskiwanie spotkało zróżnicowaną reprezentację katalogu"
-#: ../libsvn_fs_fs/fs_fs.c:5952
+#: ../libsvn_fs_fs/fs_fs.c:5963
#, c-format
msgid "Expected current rev to be <= %ld but found %ld"
msgstr "Oczekiwano, że obecna wersja to <= %ld, ale znaleziono %ld"
-#: ../libsvn_fs_fs/fs_fs.c:6005
+#: ../libsvn_fs_fs/fs_fs.c:6016
#, c-format
msgid "Revision %ld has a revs file but no revprops file"
msgstr "Wersja %ld posiada plik revs, ale nie posiada pliku revprops"
-#: ../libsvn_fs_fs/fs_fs.c:6010
+#: ../libsvn_fs_fs/fs_fs.c:6021
#, c-format
msgid "Revision %ld has a non-file where its revprops file should be"
msgstr "Wersja %ld posiada nieplik, gdzie jej plik revprops powinien być"
-#: ../libsvn_fs_fs/fs_fs.c:6187
+#: ../libsvn_fs_fs/fs_fs.c:6198
#, c-format
msgid "Node origin for '%s' exists with a different value (%s) than what we were about to store (%s)"
msgstr "Pochodzenie węzła dla '%s' istnieje z inną wartością (%s) niż ta, którą prawie mieliśmy zapisać (%s)"
-#: ../libsvn_fs_fs/fs_fs.c:6296
+#: ../libsvn_fs_fs/fs_fs.c:6307
msgid "No such transaction"
msgstr "Brak takiej transakcji"
@@ -3094,17 +3094,17 @@ msgstr "Klucz reprezentacji dla sumy kontrolnej '%%s' istnieje w systemie plikó
msgid "Representation for hash '%s' not found"
msgstr "Reprezentacja dla mieszanki '%s' nieznaleziona"
-#: ../libsvn_fs_fs/tree.c:3423
+#: ../libsvn_fs_fs/tree.c:3421
#, c-format
msgid "Node-revision #'%s' claims to have mergeinfo but doesn't"
msgstr "Node-revision #'%s' twierdzi, że ma informacje o połączeniach zmian, ale nie ma ich"
-#: ../libsvn_fs_fs/tree.c:3546
+#: ../libsvn_fs_fs/tree.c:3544
#, c-format
msgid "Node-revision '%s@%ld' claims to have mergeinfo but doesn't"
msgstr "Node-revision '%s@%ld' twierdzi, że ma informacje o połączeniach zmian, ale nie ma ich"
-#: ../libsvn_fs_fs/tree.c:3667
+#: ../libsvn_fs_fs/tree.c:3665
#, c-format
msgid "Querying mergeinfo requires version %d of the FSFS filesystem schema; filesystem '%s' uses only version %d"
msgstr "Sprawdzanie informacji o połączeniach zmian wymaga wersję %d schematu systemu plików FSFS. System plików '%s' używa tylko wersję %d"
@@ -3253,13 +3253,13 @@ msgid "The CHECKOUT response did not contain a 'Location:' header"
msgstr "Odpowiedź CHECKOUT nie zawierała nagłówka 'Location:'"
#: ../libsvn_ra_neon/commit.c:513 ../libsvn_ra_neon/props.c:210
-#: ../libsvn_ra_neon/util.c:520 ../libsvn_ra_serf/commit.c:1288
-#: ../libsvn_ra_serf/commit.c:1690 ../libsvn_ra_serf/update.c:2029
+#: ../libsvn_ra_neon/util.c:520 ../libsvn_ra_serf/commit.c:1291
+#: ../libsvn_ra_serf/commit.c:1693 ../libsvn_ra_serf/update.c:2029
#, c-format
msgid "Unable to parse URL '%s'"
msgstr "Nie można parsować URL-u: '%s'"
-#: ../libsvn_ra_neon/commit.c:1037 ../libsvn_ra_serf/commit.c:1539
+#: ../libsvn_ra_neon/commit.c:1037 ../libsvn_ra_serf/commit.c:1542
#, c-format
msgid "File '%s' already exists"
msgstr "Plik '%s' już istnieje"
@@ -3296,7 +3296,7 @@ msgstr ""
msgid "Server response missing the expected deadprop-count property"
msgstr "Brak oczekiwanego atrybutu deadprop-count w odpowiedzi serwera"
-#: ../libsvn_ra_neon/fetch.c:1168 ../libsvn_ra_serf/commit.c:2063
+#: ../libsvn_ra_neon/fetch.c:1168 ../libsvn_ra_serf/commit.c:2066
msgid "DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent"
msgstr "Żądanie DAV nie powiodło się; prawdopodobnie skrypt pre-revprop-change nie istnieje lub zgłosił błąd w trakcie działania"
@@ -3553,7 +3553,7 @@ msgstr "Brak DAV:baseline-collection w bazowym obiekcie"
msgid "'%s' was not present on the baseline resource"
msgstr "'%s' nie był obecny w zasobie baseline"
-#: ../libsvn_ra_neon/props.c:1154 ../libsvn_ra_serf/commit.c:773
+#: ../libsvn_ra_neon/props.c:1154 ../libsvn_ra_serf/commit.c:776
msgid "At least one property change failed; repository is unchanged"
msgstr "Co najmniej jedna zmiana atrybutu nie powiodła się. Repozytorium nie uległo żadnym zmianom"
@@ -3740,46 +3740,46 @@ msgstr "Dla żądania '%s' otrzymano niepoprawny wynikowy XML: %s (%s)"
msgid "Missing 'realm' attribute in Authorization header"
msgstr "Brak atrybutu 'realm' w nagłówku Authorization"
-#: ../libsvn_ra_serf/commit.c:403 ../libsvn_ra_serf/commit.c:426
+#: ../libsvn_ra_serf/commit.c:406 ../libsvn_ra_serf/commit.c:429
#, c-format
msgid "Directory '%s' is out of date; try updating"
msgstr "Katalog '%s' jest nieaktualny. Spróbuj zaktualizować"
-#: ../libsvn_ra_serf/commit.c:504 ../libsvn_repos/commit.c:388
+#: ../libsvn_ra_serf/commit.c:507 ../libsvn_repos/commit.c:388
#, c-format
msgid "Path '%s' not present"
msgstr "Ścieżka '%s' nie istnieje"
-#: ../libsvn_ra_serf/commit.c:589 ../libsvn_ra_serf/commit.c:603
+#: ../libsvn_ra_serf/commit.c:592 ../libsvn_ra_serf/commit.c:606
#, c-format
msgid "File '%s' is out of date; try updating"
msgstr "Plik '%s' jest nieaktualny. Spróbuj aktualizować"
-#: ../libsvn_ra_serf/commit.c:974
+#: ../libsvn_ra_serf/commit.c:977
#, c-format
msgid "Failed writing updated file"
msgstr "Zapis zaktualizowanego pliku nie powiódł się"
-#: ../libsvn_ra_serf/commit.c:1026
+#: ../libsvn_ra_serf/commit.c:1029
msgid "The OPTIONS response did not include the requested activity-collection-set value"
msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości activity-collection-set"
-#: ../libsvn_ra_serf/commit.c:1054
+#: ../libsvn_ra_serf/commit.c:1057
#, c-format
msgid "%s of '%s': %d %s (%s://%s)"
msgstr "%s z '%s': %d %s (%s://%s)"
-#: ../libsvn_ra_serf/commit.c:1082 ../libsvn_ra_serf/property.c:963
+#: ../libsvn_ra_serf/commit.c:1085 ../libsvn_ra_serf/property.c:963
#: ../libsvn_ra_serf/update.c:1128 ../libsvn_ra_serf/update.c:1671
msgid "The OPTIONS response did not include the requested checked-in value"
msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości checked-in"
-#: ../libsvn_ra_serf/commit.c:1308 ../libsvn_ra_serf/commit.c:1710
+#: ../libsvn_ra_serf/commit.c:1311 ../libsvn_ra_serf/commit.c:1713
#: ../libsvn_ra_serf/property.c:977
msgid "The OPTIONS response did not include the requested baseline-collection value"
msgstr "Odpowiedź OPTIONS nie zawiera wymaganej wartości baseline-collection"
-#: ../libsvn_ra_serf/commit.c:1334
+#: ../libsvn_ra_serf/commit.c:1337
#, c-format
msgid "Adding a directory failed: %s on %s (%d)"
msgstr "Dodawanie katalogu nie powiodło się: %s na %s (%d)"
@@ -4694,6 +4694,11 @@ msgstr "Nie można odczytać ścieżki; dostęp zabroniony"
msgid "'%s' is not a file in revision %ld"
msgstr "'%s' nie jest plikiem w wersji %ld"
+#: ../libsvn_subr/auth.c:601
+#, c-format
+msgid "Invalid config: unknown password store '%s'"
+msgstr "Błąd konfiguracji: nieznane miejsce przechowywania haseł '%s'"
+
#: ../libsvn_subr/cache-inprocess.c:179
#, c-format
msgid "Can't lock cache mutex"
@@ -4753,12 +4758,7 @@ msgstr "Nieznany błąd podczas dodawania serwera do memcache"
msgid "Unknown error creating apr_memcache_t"
msgstr "Nieznany błąd podczas tworzenia apr_memcache_t"
-#: ../libsvn_subr/cmdline.c:525
-#, c-format
-msgid "Invalid config: unknown password store '%s'"
-msgstr "Błąd konfiguracji: nieznane miejsce przechowywania haseł '%s'"
-
-#: ../libsvn_subr/cmdline.c:688
+#: ../libsvn_subr/cmdline.c:586
#, c-format
msgid "Error initializing command line arguments"
msgstr "Błąd podczas inicjalizacji argumentów linii poleceń"
@@ -5327,19 +5327,19 @@ msgstr "Nie znaleziono końca linii w linii listy zakresu w '%s'"
msgid "Could not parse mergeinfo string '%s'"
msgstr "Nie można parsować ciągu znaków '%s' informacji o połączeniach zmian"
-#: ../libsvn_subr/mergeinfo.c:1579
+#: ../libsvn_subr/mergeinfo.c:1583
msgid "NULL mergeinfo catalog\n"
msgstr "NULL katalog informacji o połączeniach zmian\n"
-#: ../libsvn_subr/mergeinfo.c:1587
+#: ../libsvn_subr/mergeinfo.c:1591
msgid "empty mergeinfo catalog\n"
msgstr "Pusty katalog informacji o połączeniach zmian\n"
-#: ../libsvn_subr/mergeinfo.c:1620
+#: ../libsvn_subr/mergeinfo.c:1624
msgid "NULL mergeinfo\n"
msgstr "NULL informacja o połączeniach zmian\n"
-#: ../libsvn_subr/mergeinfo.c:1627
+#: ../libsvn_subr/mergeinfo.c:1631
msgid "empty mergeinfo\n"
msgstr "Pusta informacja o połączeniach zmian\n"
@@ -5432,7 +5432,7 @@ msgstr "'%s' nie jest ani nazwą pliku ani katalogu"
msgid "Can't determine the native path encoding"
msgstr "Nie można ustalić natywnego kodowania ścieżki"
-#: ../libsvn_subr/path.c:1142
+#: ../libsvn_subr/path.c:1138
#, c-format
msgid "Invalid control character '0x%02x' in path '%s'"
msgstr "Błędny znak kontrolny '0x%02x' w ścieżce '%s'"
@@ -6177,123 +6177,123 @@ msgstr "Brak 'lewego' atrybutu w '%s'"
msgid "Missing 'right' attribute in '%s'"
msgstr "Brak 'prawego' atrybutu w '%s'"
-#: ../libsvn_wc/log.c:616
+#: ../libsvn_wc/log.c:617
#, c-format
msgid "Missing 'dest' attribute in '%s'"
msgstr "Brak atrybutu 'cel' w '%s'"
-#: ../libsvn_wc/log.c:693
+#: ../libsvn_wc/log.c:694
#, c-format
msgid "Missing 'timestamp' attribute in '%s'"
msgstr "Brak atrybutu 'timestamp' w '%s'"
-#: ../libsvn_wc/log.c:789 ../libsvn_wc/props.c:532
+#: ../libsvn_wc/log.c:790 ../libsvn_wc/props.c:532
#, c-format
msgid "Error getting 'affected time' on '%s'"
msgstr "Błąd uzyskiwania czasu modyfikacji '%s'"
-#: ../libsvn_wc/log.c:837
+#: ../libsvn_wc/log.c:838
#, c-format
msgid "Error getting file size on '%s'"
msgstr "Błąd uzyskiwania rozmiaru pliku '%s'"
-#: ../libsvn_wc/log.c:855
+#: ../libsvn_wc/log.c:856
#, c-format
msgid "Error modifying entry for '%s'"
msgstr "Błąd przy modyfikacji informacji o '%s'"
-#: ../libsvn_wc/log.c:881
+#: ../libsvn_wc/log.c:882
#, c-format
msgid "Error removing lock from entry for '%s'"
msgstr "Błąd podczas usuwania blokady dla '%s'"
-#: ../libsvn_wc/log.c:904
+#: ../libsvn_wc/log.c:905
#, c-format
msgid "Error removing changelist from entry '%s'"
msgstr "Błąd podczas usuwania listy zmian z wpisu '%s'"
-#: ../libsvn_wc/log.c:1083
+#: ../libsvn_wc/log.c:1084
#, c-format
msgid "Missing 'revision' attribute for '%s'"
msgstr "Brak atrybutu 'revision' dla '%s'"
-#: ../libsvn_wc/log.c:1107
+#: ../libsvn_wc/log.c:1108
#, c-format
msgid "Log command for directory '%s' is mislocated"
msgstr "Polecenie log dla katalogu '%s' jest niepoprawnie umieszczone"
-#: ../libsvn_wc/log.c:1275
+#: ../libsvn_wc/log.c:1276
#, c-format
msgid "Error replacing text-base of '%s'"
msgstr "Błąd zastępowania wersji bazowej '%s'"
-#: ../libsvn_wc/log.c:1280
+#: ../libsvn_wc/log.c:1281
#, c-format
msgid "Error getting 'affected time' of '%s'"
msgstr "Błąd uzyskiwania czasu modyfikacji '%s'"
-#: ../libsvn_wc/log.c:1303
+#: ../libsvn_wc/log.c:1304
#, c-format
msgid "Error getting 'affected time' for '%s'"
msgstr "Błąd uzyskiwania czasu modyfikacji dla '%s'"
-#: ../libsvn_wc/log.c:1323
+#: ../libsvn_wc/log.c:1324
#, c-format
msgid "Error comparing '%s' and '%s'"
msgstr "Błąd porównywania '%s' i '%s'"
-#: ../libsvn_wc/log.c:1376 ../libsvn_wc/log.c:1425
+#: ../libsvn_wc/log.c:1377 ../libsvn_wc/log.c:1426
#, c-format
msgid "Error modifying entry of '%s'"
msgstr "Błąd modyfikacji wpisu '%s'"
-#: ../libsvn_wc/log.c:1480
+#: ../libsvn_wc/log.c:1481
msgid "Invalid 'format' attribute"
msgstr "Błędny atrybut 'format'"
-#: ../libsvn_wc/log.c:1521
+#: ../libsvn_wc/log.c:1522
msgid "Attempt to add tree conflict that already exists"
msgstr "Próba dodania już istniejącego konfliktu drzewnego"
-#: ../libsvn_wc/log.c:1554
+#: ../libsvn_wc/log.c:1555
#, c-format
msgid "Log entry missing 'name' attribute (entry '%s' for directory '%s')"
msgstr "Zapis w logu nie zawiera atrybutu 'name' (element '%s' w katalogu '%s')"
-#: ../libsvn_wc/log.c:1628
+#: ../libsvn_wc/log.c:1629
#, c-format
msgid "Unrecognized logfile element '%s' in '%s'"
msgstr "Nierozpoznany element '%s' w logu '%s'"
-#: ../libsvn_wc/log.c:1639
+#: ../libsvn_wc/log.c:1640
#, c-format
msgid "Error processing command '%s' in '%s'"
msgstr "Błąd podczas wykonywania polecenia '%s' w '%s'"
-#: ../libsvn_wc/log.c:1839
+#: ../libsvn_wc/log.c:1840
msgid "Couldn't open log"
msgstr "Błąd otwarcia logu"
-#: ../libsvn_wc/log.c:1880
+#: ../libsvn_wc/log.c:1881
#, c-format
msgid "Error recording tree conflicts in '%s'"
msgstr "Błąd podczas zapisywania konfliktów drzewnych w '%s'"
-#: ../libsvn_wc/log.c:2504
+#: ../libsvn_wc/log.c:2505
#, c-format
msgid "Error writing log for '%s'"
msgstr "Błąd zapisu logu dla '%s'"
-#: ../libsvn_wc/log.c:2551
+#: ../libsvn_wc/log.c:2552
#, c-format
msgid "'%s' is not a working copy directory"
msgstr "'%s' nie jest katalogiem kopii roboczej"
-#: ../libsvn_wc/merge.c:430 ../libsvn_wc/merge.c:738
+#: ../libsvn_wc/merge.c:435 ../libsvn_wc/merge.c:746
msgid "Conflict callback violated API: returned no results"
msgstr "Konfliktowe wywołanie zwrotne naruszyło API: nie zwróciło wyników"
-#: ../libsvn_wc/merge.c:781
+#: ../libsvn_wc/merge.c:789
msgid "Conflict callback violated API: returned no merged file"
msgstr "Konfliktowe wywołanie zwrotne naruszyło API: nie zwróciło połączonego pliku"
@@ -6494,10 +6494,14 @@ msgstr ""
msgid "Relocate can only change the repository part of an URL"
msgstr "Polecenie relocate może tylko zmienić repozytorialną część URL-u"
-#: ../libsvn_wc/tree_conflicts.c:88
-msgid "Missing field delimiter in tree conflict description"
+#: ../libsvn_wc/tree_conflicts.c:73
+msgid "Missing field separator in tree conflict description"
msgstr "Brakujący separator pola w opisie konfliktu drzewnego"
+#: ../libsvn_wc/tree_conflicts.c:87
+msgid "No separator at end of tree conflict description, even though there is still data left to read"
+msgstr "Brak separatora na końcu opisu konfliktu drzewnego, chociaż są tam jeszcze dane pozostawione do odczytania"
+
#: ../libsvn_wc/tree_conflicts.c:118
msgid "Unfinished escape sequence in tree conflict description"
msgstr "Niezakończona sekwencja ucieczki w opisie konfliktu drzewnego"
@@ -6506,121 +6510,99 @@ msgstr "Niezakończona sekwencja ucieczki w opisie konfliktu drzewnego"
msgid "Illegal escaped character in tree conflict description"
msgstr "Nieprawidłowy znak poprzedzany przez znak ucieczki w opisu konfliktu drzewnego"
-#: ../libsvn_wc/tree_conflicts.c:159
+#: ../libsvn_wc/tree_conflicts.c:210
+msgid "Unknown enumeration value in tree conflict description"
+msgstr "Nieznana wartość wyliczenia w opisie konfliktu drzewnego"
+
+#: ../libsvn_wc/tree_conflicts.c:285
msgid "Empty 'victim' field in tree conflict description"
msgstr "Puste pole 'victim' w opisie konfliktu drzewnego"
-#: ../libsvn_wc/tree_conflicts.c:179 ../libsvn_wc/tree_conflicts.c:204
-#: ../libsvn_wc/tree_conflicts.c:231 ../libsvn_wc/tree_conflicts.c:258
-#: ../libsvn_wc/tree_conflicts.c:295
-msgid "Expected tree conflict data but got none"
-msgstr "Oczekiwano danych konfliktu drzewnego, ale nic nie uzyskano"
-
-#: ../libsvn_wc/tree_conflicts.c:187
+#: ../libsvn_wc/tree_conflicts.c:294
msgid "Invalid 'node_kind' field in tree conflict description"
msgstr "Nieprawidłowe pole 'node_kind' w opisie konfliktu drzewnego"
-#: ../libsvn_wc/tree_conflicts.c:214
-msgid "Invalid 'operation' field in tree conflict description"
-msgstr "Niepoprawne pole 'operation' w opisie konfliktu drzewnego"
-
-#: ../libsvn_wc/tree_conflicts.c:241
-msgid "Invalid 'action' field in tree conflict description"
-msgstr "Nieprawidłowe pole 'action' w opisie konfliktu drzewnego"
-
-#: ../libsvn_wc/tree_conflicts.c:272
-msgid "Invalid 'reason' field in tree conflict description"
-msgstr "Nieprawidłowe pole 'reason' w opisie konfliktu drzewnego"
-
-#: ../libsvn_wc/tree_conflicts.c:321
-msgid "No delimiter at end of tree conflict description, even though there is still data left to read"
-msgstr "Brak ogranicznika na końcu opisu konfliktu drzewnego, chociaż są tam jeszcze dane pozostawione do odczytania"
-
-#: ../libsvn_wc/tree_conflicts.c:360
-msgid "Invalid tree conflict data in 'entries' file, but no idea what went wrong"
-msgstr "Nieprawidłowe dane konfliktu drzewnego w pliku 'entries', ale brak pomysłu, co poszło źle"
-
-#: ../libsvn_wc/update_editor.c:634
+#: ../libsvn_wc/update_editor.c:639
#, c-format
msgid "No '.' entry in: '%s'"
msgstr "Brak elementu '.' w: '%s'"
-#: ../libsvn_wc/update_editor.c:1127
+#: ../libsvn_wc/update_editor.c:1132
#, c-format
msgid "Path '%s' is not in the working copy"
msgstr "Ścieżka '%s' nie jest w kopii roboczej"
-#: ../libsvn_wc/update_editor.c:1839
+#: ../libsvn_wc/update_editor.c:1929
#, c-format
msgid "Failed to add directory '%s': a non-directory object of the same name already exists"
msgstr "Błąd dodawania katalogu '%s': niekatalogowy obiekt o tej samej nazwie już istnieje"
-#: ../libsvn_wc/update_editor.c:1909
+#: ../libsvn_wc/update_editor.c:1997
#, c-format
msgid "Failed to add directory '%s': an unversioned directory of the same name already exists"
msgstr "Błąd dodawania katalogu '%s': niewersjonowany katalog o tej samej nazwie już istnieje"
-#: ../libsvn_wc/update_editor.c:1985
+#: ../libsvn_wc/update_editor.c:2074
#, c-format
msgid "Failed to add directory '%s': object of the same name as the administrative directory"
msgstr "Błąd dodawania katalogu '%s': obiekt o tej samej nazwie jak katalog administracyjny"
-#: ../libsvn_wc/update_editor.c:2019
+#: ../libsvn_wc/update_editor.c:2108
#, c-format
msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
msgstr "Błąd dodawania katalogu '%s': argumenty copyfrom nie są jeszcze obsługiwane"
-#: ../libsvn_wc/update_editor.c:2425
+#: ../libsvn_wc/update_editor.c:2515
msgid "Couldn't do property merge"
msgstr "Nie udało się łączenie zmian atrybutu"
-#: ../libsvn_wc/update_editor.c:2498
+#: ../libsvn_wc/update_editor.c:2588
#, c-format
msgid "Failed to mark '%s' absent: item of the same name is already scheduled for addition"
msgstr "Nie udało się oznaczanie '%s' jako brakującego: element o tej samej nazwie oczekuje na dodanie"
-#: ../libsvn_wc/update_editor.c:2588
+#: ../libsvn_wc/update_editor.c:2678
msgid "Destination directory of add-with-history is missing a URL"
msgstr "Katalog docelowy add-with-history nie posiada URL-u"
-#: ../libsvn_wc/update_editor.c:2603
+#: ../libsvn_wc/update_editor.c:2693
msgid "Destination URLs are broken"
msgstr "Docelowe URL-e są uszkodzone"
-#: ../libsvn_wc/update_editor.c:2864
+#: ../libsvn_wc/update_editor.c:2954
msgid "No fetch_func supplied to update_editor"
msgstr "fetch_func niedostarczone do update_editor"
-#: ../libsvn_wc/update_editor.c:2938
+#: ../libsvn_wc/update_editor.c:3028
msgid "Bad copyfrom arguments received"
msgstr "Otrzymano złe argumenty copyfrom"
-#: ../libsvn_wc/update_editor.c:3031
+#: ../libsvn_wc/update_editor.c:3122
#, c-format
msgid "Failed to add file '%s': a non-file object of the same name already exists"
msgstr "Błąd dodawania pliku '%s': nieplik o tej samej nazwie już istnieje"
-#: ../libsvn_wc/update_editor.c:3046
+#: ../libsvn_wc/update_editor.c:3137
#, c-format
msgid "Failed to add file '%s': object of the same name already exists"
msgstr "Błąd dodawania pliku '%s': obiekt o tej samej nazwie już istnieje"
-#: ../libsvn_wc/update_editor.c:3113
+#: ../libsvn_wc/update_editor.c:3204
#, c-format
msgid "File '%s' in directory '%s' is not a versioned resource"
msgstr "Plik '%s' w katalogu '%s' nie podlega zarządzaniu wersjami"
-#: ../libsvn_wc/update_editor.c:3292
+#: ../libsvn_wc/update_editor.c:3384
#, c-format
msgid "Checksum mismatch for '%s'; recorded: '%s', actual: '%s'"
msgstr "Błąd sumy kontrolnej dla '%s'; zapisana: '%s', faktyczna: '%s'"
-#: ../libsvn_wc/update_editor.c:4573
+#: ../libsvn_wc/update_editor.c:4671
#, c-format
msgid "'%s' has no ancestry information"
msgstr "Brak informacji o pochodzeniu '%s'"
-#: ../libsvn_wc/update_editor.c:4730
+#: ../libsvn_wc/update_editor.c:4828
#, c-format
msgid "Copyfrom-url '%s' has different repository root than '%s'"
msgstr "Źródłowy URL '%s' jest z innego repozytorium niż '%s'"
@@ -6643,7 +6625,7 @@ msgstr "Nie można znaleźć URL-u dla '%s'"
msgid "'verbose' option invalid in XML mode"
msgstr "Opcja 'verbose' nie jest prawidłową opcją dla trybu XML"
-#: ../svn/blame-cmd.c:273 ../svn/info-cmd.c:484 ../svn/list-cmd.c:242
+#: ../svn/blame-cmd.c:273 ../svn/info-cmd.c:508 ../svn/list-cmd.c:242
#: ../svn/status-cmd.c:209
msgid "'incremental' option only valid in XML mode"
msgstr "Opcja 'incremental' jest prawidłowa tylko w trybie XML"
@@ -7169,12 +7151,19 @@ msgstr[2] ""
msgid "Changelist: %s\n"
msgstr "Lista zmian: %s\n"
-#: ../svn/info-cmd.c:437
-#, c-format
-msgid "Tree conflict: %s"
-msgstr "Konflikt drzewny: %s"
+#: ../svn/info-cmd.c:445
+msgid "Tree conflict"
+msgstr "Konflikt drzewny"
-#: ../svn/info-cmd.c:521
+#: ../svn/info-cmd.c:451
+msgid "Source left"
+msgstr "Źródło lewe"
+
+#: ../svn/info-cmd.c:460
+msgid "Source right"
+msgstr "Źródło prawe"
+
+#: ../svn/info-cmd.c:545
#, c-format
msgid ""
"%s: (Not a versioned resource)\n"
@@ -7183,7 +7172,7 @@ msgstr ""
"%s: (Obiekt niepodlegający zarządzaniu wersjami)\n"
"\n"
-#: ../svn/info-cmd.c:528
+#: ../svn/info-cmd.c:552
#, c-format
msgid ""
"%s: (Not a valid URL)\n"
@@ -9483,34 +9472,34 @@ msgstr "'%s' posiada żeton blokady, ale brakuje właściciela blokady"
msgid "'%s' to '%s' is not a valid relocation"
msgstr "'%s' do '%s' nie jest prawidłowym przeniesieniem"
-#: ../svn/tree-conflicts.c:32 ../svn/tree-conflicts.c:48
+#: ../svn/tree-conflicts.c:34 ../svn/tree-conflicts.c:50
msgid "edit"
msgstr "modyfikacja"
-#: ../svn/tree-conflicts.c:34 ../svn/tree-conflicts.c:54
+#: ../svn/tree-conflicts.c:36 ../svn/tree-conflicts.c:56
msgid "add"
msgstr "dodanie"
-#: ../svn/tree-conflicts.c:36 ../svn/tree-conflicts.c:52
+#: ../svn/tree-conflicts.c:38 ../svn/tree-conflicts.c:54
msgid "delete"
msgstr "usunięcie"
-#: ../svn/tree-conflicts.c:50
+#: ../svn/tree-conflicts.c:52
msgid "obstruction"
msgstr "zagrodzenie"
-#: ../svn/tree-conflicts.c:56
+#: ../svn/tree-conflicts.c:58
msgid "missing"
msgstr "brak"
-#: ../svn/tree-conflicts.c:58
+#: ../svn/tree-conflicts.c:60
msgid "unversioned"
msgstr "niewersjonowane"
-#: ../svn/tree-conflicts.c:74
+#: ../svn/tree-conflicts.c:77
#, c-format
-msgid "incoming %s, local %s"
-msgstr "przychodzące: %s, lokalne: %s"
+msgid "local %s, incoming %s upon %s"
+msgstr "lokalne: %s, przychodzące: %s, operacja: %s"
#: ../svn/util.c:64
#, c-format
@@ -9613,7 +9602,35 @@ msgstr ""
msgid "Use --force to override this restriction"
msgstr "Użyj opcję --force, aby obejść to ograniczenie"
-#: ../svn/util.c:1114
+#: ../svn/util.c:1023
+msgid "none"
+msgstr "nic"
+
+#: ../svn/util.c:1025
+msgid "dir"
+msgstr "katalog"
+
+#: ../svn/util.c:1027
+msgid "file"
+msgstr "plik"
+
+#: ../svn/util.c:1054
+msgid "update"
+msgstr "aktualizacja"
+
+#: ../svn/util.c:1056
+msgid "switch"
+msgstr "przełączanie"
+
+#: ../svn/util.c:1058
+msgid "merge"
+msgstr "łączenie zmian"
+
+#: ../svn/util.c:1060
+msgid "unknown operation"
+msgstr "nieznana operacja"
+
+#: ../svn/util.c:1162
msgid "(invalid date)"
msgstr "(nieprawidłowa data)"
@@ -1801,7 +1801,8 @@ main(int argc, const char *argv[])
opt_state.depth = SVN_DEPTH_INFINITY_OR_IMMEDIATES(FALSE);
}
else if (subcommand->cmd_func == svn_cl__revert
- || subcommand->cmd_func == svn_cl__add)
+ || subcommand->cmd_func == svn_cl__add
+ || subcommand->cmd_func == svn_cl__commit)
{
/* In pre-1.5 Subversion, some commands treated -N like
--depth=empty, so force that mapping here. Anyway, with
@@ -1534,17 +1534,14 @@ def commit_nonrecursive(sbox):
### commit to behave differently from other commands taking -N.
###
### These days, -N should be equivalent to --depth=files in almost
- ### all cases. There are some exceptions (e.g., status), but commit
- ### is not an exception. Thus, the above recipe is now incorrect,
- ### because "wc/dirA/dirB" was given as an explicit target, and
- ### therefore the file "wc/dirA/dirB/nocommit" *should* have been
- ### committed after all, since it's a file child of a named target
- ### and -N means --depth=files.
+ ### all cases. There are some exceptions (e.g., status), and commit
+ ### is one of them: 'commit -N' means 'commit --depth=empty'.
###
- ### So we really need two tests: one for commit -N (--depth=files),
- ### and another for --depth=empty. I've changed this test to cover
- ### the -N case, and added 'commit_propmods_with_depth_empty' to
- ### depth_tests.py to cover the --depth=empty case.
+ ### The original implementation, as well as this test, mistakenly
+ ### mapped 'commit -N' to 'commit --depth=files'; that was a bug that
+ ### made 'svn ci -N' incompatible with 1.4 and earlier versions.
+ ###
+ ### See also 'commit_propmods_with_depth_empty' in depth_tests.py .
# Now add these directories and files, except the last:
dirA_path = 'dirA'
@@ -1564,19 +1561,19 @@ def commit_nonrecursive(sbox):
# Add them to version control.
svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput, [],
- 'add', '--depth=empty',
+ 'add', '-N',
os.path.join(wc_dir, dirA_path),
os.path.join(wc_dir, fileA_path),
- os.path.join(wc_dir, fileB_path),
+ # don't add fileB
os.path.join(wc_dir, dirB_path),
os.path.join(wc_dir, nope_1_path),
- os.path.join(wc_dir, nope_2_path))
+ # don't add nope_2
+ )
expected_output = svntest.wc.State(
wc_dir,
{ dirA_path : Item(verb='Adding'),
- fileA_path : Item(verb='Adding'),
- fileB_path : Item(verb='Adding'),
+ # no children!
}
)
@@ -1595,11 +1592,11 @@ def commit_nonrecursive(sbox):
# Expect some commits and some non-commits from this part of the test.
expected_status.add({
dirA_path : Item(status=' ', wc_rev=3),
- fileA_path : Item(status=' ', wc_rev=3),
- fileB_path : Item(status=' ', wc_rev=3),
+ fileA_path : Item(status='A ', wc_rev=0),
+ # no fileB
dirB_path : Item(status='A ', wc_rev=0),
nope_1_path : Item(status='A ', wc_rev=0),
- nope_2_path : Item(status='A ', wc_rev=0)
+ # no nope_2
})
svntest.actions.run_and_verify_commit(wc_dir,
@@ -937,8 +937,10 @@ def depth_update_to_more_depth(sbox):
verify_depth("Non-infinity depth detected after an upgrade to depth-infinity",
"infinity", "A")
-def commit_propmods_with_depth_empty(sbox):
- "commit property mods only, using --depth=empty"
+def commit_propmods_with_depth_empty_helper(sbox, depth_arg):
+ """Helper for commit_propmods_with_depth_empty().
+ DEPTH_ARG should be either '--depth=empty' or '-N'."""
+
sbox.build()
wc_dir = sbox.wc_dir
@@ -987,9 +989,20 @@ def commit_propmods_with_depth_empty(sbox):
expected_output,
expected_status,
None,
- '--depth=empty',
+ depth_arg,
wc_dir, D_path)
+# See also commit_tests 26: commit_nonrecursive
+def commit_propmods_with_depth_empty(sbox):
+ "commit property mods only, using --depth=empty"
+
+ sbox2 = sbox.clone_dependent()
+
+ # Run once with '-N' and once with '--depth=empty' to make sure they
+ # function identically.
+ commit_propmods_with_depth_empty_helper(sbox, '-N')
+ commit_propmods_with_depth_empty_helper(sbox2, '--depth=empty')
+
# Test for issue #2845.
def diff_in_depthy_wc(sbox):
"diff at various depths in non-infinity wc"
@@ -653,24 +653,24 @@ def disallow_dot_or_dotdot_directory_reference(sbox):
C_path = os.path.join(wc_dir, 'A', 'C')
F_path = os.path.join(wc_dir, 'A', 'C', 'F')
- external_urls = external_url_for.values()
+ external_urls = list(external_url_for.values())
externals_value_1 = "../foo" + " " + external_urls.pop() + "\n"
- if not external_urls: external_urls = external_url_for.values()
+ if not external_urls: external_urls = list(external_url_for.values())
externals_value_2 = "foo/bar/../baz" + " " + external_urls.pop() + "\n"
- if not external_urls: external_urls = external_url_for.values()
+ if not external_urls: external_urls = list(external_url_for.values())
externals_value_3 = "foo/.." + " " + external_urls.pop() + "\n"
- if not external_urls: external_urls = external_url_for.values()
+ if not external_urls: external_urls = list(external_url_for.values())
externals_value_4 = "." + " " + external_urls.pop() + "\n"
- if not external_urls: external_urls = external_url_for.values()
+ if not external_urls: external_urls = list(external_url_for.values())
externals_value_5 = "./" + " " + external_urls.pop() + "\n"
- if not external_urls: external_urls = external_url_for.values()
+ if not external_urls: external_urls = list(external_url_for.values())
externals_value_6 = ".." + " " + external_urls.pop() + "\n"
- if not external_urls: external_urls = external_url_for.values()
+ if not external_urls: external_urls = list(external_url_for.values())
externals_value_7 = "././/.///." + " " + external_urls.pop() + "\n"
- if not external_urls: external_urls = external_url_for.values()
+ if not external_urls: external_urls = list(external_url_for.values())
externals_value_8 = "/foo" + " " + external_urls.pop() + "\n"
- if not external_urls: external_urls = external_url_for.values()
+ if not external_urls: external_urls = list(external_url_for.values())
set_externals_for_path_expect_error(B_path, externals_value_1)
set_externals_for_path_expect_error(G_path, externals_value_2)
@@ -13386,6 +13386,8 @@ state_after_leaf_edit = svntest.actions.deep_trees_after_leaf_edit
state_after_leaf_del = svntest.actions.deep_trees_after_leaf_del
state_after_tree_del = svntest.actions.deep_trees_after_tree_del
+deep_trees_conflict_output = svntest.actions.deep_trees_conflict_output
+
j = os.path.join
DeepTreesTestCase = svntest.actions.DeepTreesTestCase
@@ -13403,14 +13405,7 @@ def tree_conflicts_on_merge_local_ci_4_1(sbox):
# use case 4, as in notes/tree-conflicts/use-cases.txt
# 4.1) local tree delete, incoming leaf edit
- expected_output = svntest.wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status=' ', treeconflict='C'),
- 'DDF/D1' : Item(status=' ', treeconflict='C'),
- 'DDD/D1' : Item(status=' ', treeconflict='C'),
- })
+ expected_output = deep_trees_conflict_output
expected_disk = state_after_tree_del
@@ -13448,14 +13443,7 @@ def tree_conflicts_on_merge_local_ci_4_2(sbox):
# 4.2) local tree delete, incoming leaf delete
- expected_output = svntest.wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status=' ', treeconflict='C'),
- 'DDF/D1' : Item(status=' ', treeconflict='C'),
- 'DDD/D1' : Item(status=' ', treeconflict='C'),
- })
+ expected_output = deep_trees_conflict_output
expected_disk = state_after_tree_del
@@ -13496,46 +13484,32 @@ def tree_conflicts_on_merge_local_ci_5_1(sbox):
# use case 5, as in notes/tree-conflicts/use-cases.txt
# 5.1) local leaf edit, incoming tree delete
- expected_output = svntest.wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'D/D1' : Item(status='D '),
- 'DF/D1' : Item(status='D '),
- 'DD/D1' : Item(status='D '),
- 'DDF/D1' : Item(status='D '),
- 'DDD/D1' : Item(status='D '),
- })
+ expected_output = deep_trees_conflict_output
- expected_disk = svntest.wc.State('', {
- 'DF/D1' : Item(),
- 'DDF/D1/D2' : Item(),
- 'F/alpha' : Item(contents="This is the file 'alpha'.\nMore text for file alpha.\n"),
- 'DDD/D1/D2/D3' : Item(),
- 'DD/D1/D2' : Item(),
- 'D/D1' : Item(),
- })
+ expected_disk = disk_after_leaf_edit
# We should detect 6 tree conflicts, and nothing should be deleted (when
# we skip tree conflict victims).
expected_status = svntest.wc.State('', {
'' : Item(status=' M', wc_rev='3'),
'D' : Item(status=' ', wc_rev='3'),
- 'D/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'D/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
'D/D1/delta' : Item(status='D ', wc_rev='4'),
'DD' : Item(status=' ', wc_rev='3'),
- 'DD/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DD/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
'DD/D1/D2' : Item(status='D ', wc_rev='3'),
'DD/D1/D2/epsilon' : Item(status='D ', wc_rev='4'),
'DDD' : Item(status=' ', wc_rev='3'),
- 'DDD/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DDD/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3'),
'DDD/D1/D2/D3/zeta' : Item(status='D ', wc_rev='4'),
'DDF' : Item(status=' ', wc_rev='3'),
- 'DDF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DDF/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='4'),
'DF' : Item(status=' ', wc_rev='3'),
- 'DF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DF/D1' : Item(status=' ', treeconflict='C', wc_rev='4'),
'DF/D1/beta' : Item(status='D ', wc_rev='4'),
'F' : Item(status=' ', wc_rev='3'),
'F/alpha' : Item(status=' ', treeconflict='C', wc_rev='4'),
@@ -13561,15 +13535,7 @@ def tree_conflicts_on_merge_local_ci_5_2(sbox):
# 5.2) local leaf del, incoming tree delete
- expected_output = svntest.wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status='D '),
- 'DD/D1' : Item(status='D '),
- 'DDF/D1' : Item(status='D '),
- 'DDD/D1' : Item(status='D '),
- })
-
+ expected_output = deep_trees_conflict_output
expected_disk = svntest.wc.State('', {
'F' : Item(),
@@ -13585,14 +13551,14 @@ def tree_conflicts_on_merge_local_ci_5_2(sbox):
'D' : Item(status=' ', wc_rev='3'),
'F' : Item(status=' ', wc_rev='3'),
'DD' : Item(status=' ', wc_rev='3'),
- 'DD/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DD/D1' : Item(status='! ', treeconflict='C'),
'DF' : Item(status=' ', wc_rev='3'),
- 'DF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DF/D1' : Item(status='! ', treeconflict='C'),
'DDD' : Item(status=' ', wc_rev='3'),
- 'DDD/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DDD/D1' : Item(status='! ', treeconflict='C'),
'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
'DDF' : Item(status=' ', wc_rev='3'),
- 'DDF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DDF/D1' : Item(status='! ', treeconflict='C'),
'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
'D/D1' : Item(status='! ', treeconflict='C'),
'F/alpha' : Item(status='! ', treeconflict='C'),
@@ -13617,14 +13583,7 @@ def tree_conflicts_on_merge_local_ci_6(sbox):
# use case 6, as in notes/tree-conflicts/use-cases.txt
# local tree delete, incoming tree delete
- expected_output = svntest.wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status=' ', treeconflict='C'),
- 'DDF/D1' : Item(status=' ', treeconflict='C'),
- 'DDD/D1' : Item(status=' ', treeconflict='C'),
- })
+ expected_output = deep_trees_conflict_output
expected_disk = state_after_tree_del
@@ -13665,14 +13624,7 @@ def tree_conflicts_on_merge_no_local_ci_4_1(sbox):
# use case 4, as in notes/tree-conflicts/use-cases.txt
# 4.1) local tree delete, incoming leaf edit
- expected_output = svntest.wc.State('', {
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status=' ', treeconflict='C'),
- 'DDD/D1' : Item(status=' ', treeconflict='C'),
- 'DDF/D1' : Item(status=' ', treeconflict='C'),
- })
+ expected_output = deep_trees_conflict_output
expected_disk = svntest.wc.State('', {
'F' : Item(),
@@ -13725,14 +13677,7 @@ def tree_conflicts_on_merge_no_local_ci_4_2(sbox):
# 4.2) local tree delete, incoming leaf delete
- expected_output = svntest.wc.State('', {
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status=' ', treeconflict='C'),
- 'DDD/D1' : Item(status=' ', treeconflict='C'),
- 'DDF/D1' : Item(status=' ', treeconflict='C'),
- })
+ expected_output = deep_trees_conflict_output
expected_disk = svntest.wc.State('', {
'F' : Item(),
@@ -13789,43 +13734,36 @@ def tree_conflicts_on_merge_no_local_ci_5_1(sbox):
# use case 5, as in notes/tree-conflicts/use-cases.txt
# 5.1) local leaf edit, incoming tree delete
- expected_output = svntest.wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- })
+ expected_output = deep_trees_conflict_output
expected_disk = state_after_leaf_edit
expected_status = svntest.wc.State('', {
'' : Item(status=' M', wc_rev='3'),
'D' : Item(status=' ', wc_rev='3'),
- 'D/D1' : Item(status=' M', wc_rev='3'),
+ 'D/D1' : Item(status=' M', treeconflict='C', wc_rev='3'),
'D/D1/delta' : Item(status='A ', wc_rev='0'),
'DD' : Item(status=' ', wc_rev='3'),
- 'DD/D1' : Item(status=' M', wc_rev='3'),
+ 'DD/D1' : Item(status=' M', treeconflict='C', wc_rev='3'),
'DD/D1/D2' : Item(status=' ', wc_rev='3'),
'DD/D1/D2/epsilon' : Item(status='A ', wc_rev='0'),
'DDD' : Item(status=' ', wc_rev='3'),
- 'DDD/D1' : Item(status=' M', wc_rev='3'),
+ 'DDD/D1' : Item(status=' M', treeconflict='C', wc_rev='3'),
'DDD/D1/D2' : Item(status=' ', wc_rev='3'),
'DDD/D1/D2/D3' : Item(status=' ', wc_rev='3'),
'DDD/D1/D2/D3/zeta' : Item(status='A ', wc_rev='0'),
'DDF' : Item(status=' ', wc_rev='3'),
- 'DDF/D1' : Item(status=' M', wc_rev='3'),
+ 'DDF/D1' : Item(status=' M', treeconflict='C', wc_rev='3'),
'DDF/D1/D2' : Item(status=' ', wc_rev='3'),
'DDF/D1/D2/gamma' : Item(status='M ', wc_rev='3'),
'DF' : Item(status=' ', wc_rev='3'),
- 'DF/D1' : Item(status=' M', wc_rev='3'),
+ 'DF/D1' : Item(status=' M', treeconflict='C', wc_rev='3'),
'DF/D1/beta' : Item(status='M ', wc_rev='3'),
'F' : Item(status=' ', wc_rev='3'),
'F/alpha' : Item(status='M ', treeconflict='C', wc_rev='3'),
})
expected_skip = svntest.wc.State('', {
- 'D/D1' : Item(),
- 'DF/D1' : Item(),
- 'DD/D1' : Item(),
- 'DDF/D1' : Item(),
- 'DDD/D1' : Item(),
})
svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
@@ -13846,15 +13784,7 @@ def tree_conflicts_on_merge_no_local_ci_5_2(sbox):
# 5.2) local leaf del, incoming tree delete
- expected_output = svntest.wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status='D '),
- 'DD/D1' : Item(status='D '),
- 'DDF/D1' : Item(status='D '),
- 'DDD/D1' : Item(status='D '),
- })
-
+ expected_output = deep_trees_conflict_output
expected_disk = svntest.wc.State('', {
'F' : Item(),
@@ -13872,17 +13802,17 @@ def tree_conflicts_on_merge_no_local_ci_5_2(sbox):
'F' : Item(status=' ', wc_rev='3'),
'F/alpha' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DD' : Item(status=' ', wc_rev='3'),
- 'DD/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DD/D1/D2' : Item(status='D ', wc_rev='3'),
'DF' : Item(status=' ', wc_rev='3'),
- 'DF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DF/D1/beta' : Item(status='D ', wc_rev='3'),
'DDD' : Item(status=' ', wc_rev='3'),
- 'DDD/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DDD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3'),
'DDF' : Item(status=' ', wc_rev='3'),
- 'DDF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
+ 'DDF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='3'),
})
@@ -13908,14 +13838,7 @@ def tree_conflicts_on_merge_no_local_ci_6(sbox):
# use case 6, as in notes/tree-conflicts/use-cases.txt
# local tree delete, incoming tree delete
- expected_output = svntest.wc.State('', {
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'DF/D1' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status=' ', treeconflict='C'),
- 'DDF/D1' : Item(status=' ', treeconflict='C'),
- 'DDD/D1' : Item(status=' ', treeconflict='C'),
- })
+ expected_output = deep_trees_conflict_output
expected_disk = svntest.wc.State('', {
'F' : Item(),
@@ -13933,17 +13856,17 @@ def tree_conflicts_on_merge_no_local_ci_6(sbox):
'F' : Item(status=' ', wc_rev='3'),
'F/alpha' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DD' : Item(status=' ', wc_rev='3'),
- 'DD/D1' : Item(status='D ', wc_rev='3'),
+ 'DD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DD/D1/D2' : Item(status='D ', wc_rev='3'),
'DF' : Item(status=' ', wc_rev='3'),
- 'DF/D1' : Item(status='D ', wc_rev='3'),
+ 'DF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DF/D1/beta' : Item(status='D ', wc_rev='3'),
'DDD' : Item(status=' ', wc_rev='3'),
- 'DDD/D1' : Item(status='D ', wc_rev='3'),
+ 'DDD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3'),
'DDF' : Item(status=' ', wc_rev='3'),
- 'DDF/D1' : Item(status='D ', wc_rev='3'),
+ 'DDF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='3'),
})
@@ -15153,13 +15076,13 @@ test_list = [ None,
tree_conflicts_and_obstructions,
tree_conflicts_on_merge_local_ci_4_1,
tree_conflicts_on_merge_local_ci_4_2,
- tree_conflicts_on_merge_local_ci_5_1,
- tree_conflicts_on_merge_local_ci_5_2,
+ XFail(tree_conflicts_on_merge_local_ci_5_1),
+ XFail(tree_conflicts_on_merge_local_ci_5_2),
tree_conflicts_on_merge_local_ci_6,
tree_conflicts_on_merge_no_local_ci_4_1,
tree_conflicts_on_merge_no_local_ci_4_2,
- tree_conflicts_on_merge_no_local_ci_5_1,
- tree_conflicts_on_merge_no_local_ci_5_2,
+ XFail(tree_conflicts_on_merge_no_local_ci_5_1),
+ XFail(tree_conflicts_on_merge_no_local_ci_5_2),
tree_conflicts_on_merge_no_local_ci_6,
SkipUnless(subtree_gets_changes_even_if_ultimately_deleted,
server_has_mergeinfo),
@@ -793,7 +793,7 @@ def run_and_verify_info(expected_infos, *args):
try:
for actual, expected in zip(actual_infos, expected_infos):
# compare dicts
- for key, value in expected.iteritems():
+ for key, value in expected.items():
if value is None and key in actual:
raise main.SVNLineUnequal("Found unexpected key '%s' with value '%s'"
% (key, actual[key]))
@@ -992,7 +992,7 @@ def run_and_verify_mergeinfo(error_re_string = None,
del(exp_hash[rev])
else:
extra_out.append(rev)
- extra_exp = exp_hash.keys()
+ extra_exp = list(exp_hash.keys())
raise Exception("Unexpected 'svn mergeinfo' output:\n"
" expected but not found: %s\n"
" found but not expected: %s"
@@ -2209,7 +2209,7 @@ disk_after_leaf_edit = svntest.actions.deep_trees_after_leaf_edit
disk_after_leaf_del = svntest.actions.deep_trees_after_leaf_del
disk_after_tree_del = svntest.actions.deep_trees_after_tree_del
-state_empty_dirs = svntest.actions.deep_trees_empty_dirs
+disk_empty_dirs = svntest.actions.deep_trees_empty_dirs
deep_trees_conflict_output = svntest.actions.deep_trees_conflict_output
deep_trees_conflict_output_skipped = \
@@ -2235,7 +2235,7 @@ def tree_conflicts_on_switch_1_1(sbox):
expected_output = deep_trees_conflict_output
- expected_disk = state_empty_dirs
+ expected_disk = disk_empty_dirs
# The tree conflict victims are skipped, which means they're switched
# relative to their parent dirs.
@@ -2259,7 +2259,7 @@ def tree_conflicts_on_switch_1_2(sbox):
expected_output = deep_trees_conflict_output
- expected_disk = state_empty_dirs
+ expected_disk = disk_empty_dirs
expected_status = deep_trees_status_local_tree_del.copy()
expected_status.tweak('F/alpha', 'D/D1', 'DF/D1', 'DD/D1', 'DDF/D1',
@@ -2305,42 +2305,41 @@ def tree_conflicts_on_switch_2_2(sbox):
### Current behaviour fails to show conflicts when deleting
### a directory tree that has modifications. (Will be solved
### when dirs_same_p() is implemented)
- expected_output = svntest.wc.State('', {
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status='D '),
- 'DF/D1' : Item(status='D '),
- 'DDD/D1' : Item(status='D '),
- 'DDF/D1' : Item(status='D '),
- })
+ expected_output = deep_trees_conflict_output
+
+ expected_disk = disk_empty_dirs
- expected_disk = svntest.actions.deep_trees_virginal_state.copy()
- expected_disk.remove(
+ expected_status = svntest.actions.deep_trees_virginal_state.copy()
+ expected_status.add({'' : Item(),
+ 'F/alpha' : Item()})
+ expected_status.tweak(contents=None, status=' ', wc_rev=3)
+ # Tree conflicts.
+ expected_status.tweak(
+ 'D/D1',
'F/alpha',
- 'DF/D1',
- 'DF/D1/beta',
'DD/D1',
- 'DD/D1/D2',
+ 'DF/D1',
+ 'DDD/D1',
'DDF/D1',
+ treeconflict='C', wc_rev=2, switched='S')
+ # Anything that's below a tree-conflict is also at an earlier rev.
+ expected_status.tweak(
+ 'DD/D1/D2',
+ 'DF/D1/beta',
+ 'DDD/D1/D2',
+ 'DDD/D1/D2/D3',
'DDF/D1/D2',
'DDF/D1/D2/gamma',
- 'DDD/D1',
- 'DDD/D1/D2',
+ wc_rev=2)
+ # The locally deleted nodes.
+ expected_status.tweak(
+ 'D/D1',
+ 'F/alpha',
+ 'DD/D1/D2',
+ 'DF/D1/beta',
'DDD/D1/D2/D3',
- )
-
- expected_status = svntest.wc.State('', {
- '' : Item(status=' ', wc_rev=3),
- 'D' : Item(status=' ', wc_rev=3),
- 'DD' : Item(status=' ', wc_rev=3),
- 'DDD' : Item(status=' ', wc_rev=3),
- 'DDF' : Item(status=' ', wc_rev=3),
- 'DF' : Item(status=' ', wc_rev=3),
- 'F' : Item(status=' ', wc_rev=3),
- 'D/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
- 'F/alpha' : Item(status='D ', wc_rev=2, treeconflict='C'),
- })
- expected_status.tweak('F/alpha', 'D/D1', switched='S')
+ 'DDF/D1/D2/gamma',
+ status='D ')
svntest.actions.deep_trees_run_tests_scheme_for_switch(sbox,
[ DeepTreesTestCase("local_leaf_del_incoming_tree_del",
@@ -2359,7 +2358,7 @@ def tree_conflicts_on_switch_3(sbox):
expected_output = deep_trees_conflict_output
- expected_disk = state_empty_dirs
+ expected_disk = disk_empty_dirs
expected_status = deep_trees_status_local_tree_del
expected_status.tweak('F/alpha', 'D/D1', 'DF/D1', 'DD/D1', 'DDF/D1',
@@ -3930,7 +3930,7 @@ disk_after_leaf_edit = svntest.actions.deep_trees_after_leaf_edit
disk_after_leaf_del = svntest.actions.deep_trees_after_leaf_del
disk_after_tree_del = svntest.actions.deep_trees_after_tree_del
-state_empty_dirs = svntest.actions.deep_trees_empty_dirs
+disk_empty_dirs = svntest.actions.deep_trees_empty_dirs
deep_trees_conflict_output = svntest.actions.deep_trees_conflict_output
deep_trees_conflict_output_skipped = \
@@ -3951,7 +3951,7 @@ def tree_conflicts_on_update_1_1(sbox):
expected_output = deep_trees_conflict_output
- expected_disk = state_empty_dirs
+ expected_disk = disk_empty_dirs
# Files delta, epsilon, and zeta are not in the working copy, but
# "unquiet" status includes them.
@@ -3978,7 +3978,7 @@ def tree_conflicts_on_update_1_2(sbox):
expected_output = deep_trees_conflict_output
- expected_disk = state_empty_dirs
+ expected_disk = disk_empty_dirs
expected_status = deep_trees_status_local_tree_del
@@ -4021,41 +4021,40 @@ def tree_conflicts_on_update_2_2(sbox):
### Current behaviour fails to show conflicts when deleting
### a directory tree that has modifications. (Will be solved
### when dirs_same_p() is implemented)
- expected_output = svntest.wc.State('', {
- 'D/D1' : Item(status=' ', treeconflict='C'),
- 'F/alpha' : Item(status=' ', treeconflict='C'),
- 'DD/D1' : Item(status='D '),
- 'DF/D1' : Item(status='D '),
- 'DDD/D1' : Item(status='D '),
- 'DDF/D1' : Item(status='D '),
- })
+ expected_output = deep_trees_conflict_output
+
+ expected_disk = disk_empty_dirs
- expected_disk = svntest.actions.deep_trees_virginal_state.copy()
- expected_disk.remove(
+ expected_status = svntest.actions.deep_trees_virginal_state.copy()
+ expected_status.add({'' : Item()})
+ expected_status.tweak(contents=None, status=' ', wc_rev=3)
+ # Tree conflicts.
+ expected_status.tweak(
+ 'D/D1',
'F/alpha',
- 'DF/D1',
- 'DF/D1/beta',
'DD/D1',
- 'DD/D1/D2',
+ 'DF/D1',
+ 'DDD/D1',
'DDF/D1',
+ treeconflict='C', wc_rev=2)
+ # Anything that's below a tree-conflict is also at an earlier rev.
+ expected_status.tweak(
+ 'DD/D1/D2',
+ 'DF/D1/beta',
+ 'DDD/D1/D2',
+ 'DDD/D1/D2/D3',
'DDF/D1/D2',
'DDF/D1/D2/gamma',
- 'DDD/D1',
- 'DDD/D1/D2',
+ wc_rev=2)
+ # The locally deleted nodes.
+ expected_status.tweak(
+ 'D/D1',
+ 'F/alpha',
+ 'DD/D1/D2',
+ 'DF/D1/beta',
'DDD/D1/D2/D3',
- )
-
- expected_status = svntest.wc.State('', {
- '' : Item(status=' ', wc_rev=3),
- 'D' : Item(status=' ', wc_rev=3),
- 'DD' : Item(status=' ', wc_rev=3),
- 'DDD' : Item(status=' ', wc_rev=3),
- 'DDF' : Item(status=' ', wc_rev=3),
- 'DF' : Item(status=' ', wc_rev=3),
- 'F' : Item(status=' ', wc_rev=3),
- 'D/D1' : Item(status='D ', wc_rev=2, treeconflict='C'),
- 'F/alpha' : Item(status='D ', wc_rev=2, treeconflict='C'),
- })
+ 'DDF/D1/D2/gamma',
+ status='D ')
svntest.actions.deep_trees_run_tests_scheme_for_update(sbox,
[ DeepTreesTestCase("local_leaf_del_incoming_tree_del",
@@ -4082,16 +4081,19 @@ def tree_conflicts_on_update_2_3(sbox):
'D/D1',
'F/alpha',
'DDD/D1',
- 'DDD/D1/D2/D3', ### No output!
+ 'DDD/D1/D2/D3',
]
chdir_skip_paths = [
('D', 'D1'),
- ('D/D1', ''), ### 16005: path does not exist (in repo)
('F', 'alpha'),
('DDD', 'D1'),
- ('DDD/D1/D2/D3', ''), ### ditto
]
+ # Note: We don't step *into* a directory that's deleted in the repository.
+ # E.g. ('DDD/D1/D2', '') would correctly issue a "path does not
+ # exist" error, because at that point it can't know about the
+ # tree-conflict on DDD/D1. ('D/D1', '') likewise, as tree-conflict
+ # information is stored in the parent of a victim directory.
svntest.actions.deep_trees_skipping_on_update(sbox,
DeepTreesTestCase("local_leaf_edit_incoming_tree_del",
@@ -4112,7 +4114,7 @@ def tree_conflicts_on_update_3(sbox):
expected_output = deep_trees_conflict_output
- expected_disk = state_empty_dirs
+ expected_disk = disk_empty_dirs
expected_status = deep_trees_status_local_tree_del
@@ -4184,7 +4186,7 @@ test_list = [ None,
tree_conflicts_on_update_1_2,
tree_conflicts_on_update_2_1,
tree_conflicts_on_update_2_2,
- XFail(tree_conflicts_on_update_2_3),
+ tree_conflicts_on_update_2_3,
tree_conflicts_on_update_3,
]
@@ -44,7 +44,7 @@ test_platform_specific_auth_providers(const char **msg,
"return NULL");
/* Make sure you get two providers when retrieving all auth providers */
- svn_auth_get_platform_specific_client_providers(&providers, pool);
+ svn_auth_get_platform_specific_client_providers(&providers, NULL, pool);
#if defined(SVN_HAVE_KEYCHAIN_SERVICES) || defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_KWALLET) || (defined(WIN32) && !defined(__MINGW32__))
if (providers->nelts != 2)
@@ -39,7 +39,7 @@ opmap = {
def am_uuid(ctx):
"uuids"
db = ctx.uuids_db
- ok(db.keys() == [1], 'uuid Table Structure')
+ ok(list(db.keys()) == [1], 'uuid Table Structure')
ok(re.match(r'^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',
db[1]), 'UUID format')
print "Repos UUID: %s" % db[1]
@@ -153,7 +153,7 @@ def am_nodes(ctx):
nid,cid,tid = rec[0].split(".")
data[tid.rjust(20)+nd.createpath] = (rec[0], nd)
rec = cur.next()
- k = data.keys()
+ k = list(data.keys())
k.sort()
reptype = {"fulltext":"F", "delta":"D"}
for i in k:
@@ -364,7 +364,7 @@ class Contributor:
self.big_name(html=True), True))
unique_logs = { }
- sorted_activities = self.activities.keys()
+ sorted_activities = list(self.activities.keys())
sorted_activities.sort()
out.write('<div class="h2" id="activities" title="activities">\n\n')
@@ -389,7 +389,7 @@ class Contributor:
out.write('</table>\n\n')
out.write('</div>\n\n')
- sorted_logs = unique_logs.keys()
+ sorted_logs = list(unique_logs.keys())
sorted_logs.sort()
for log in sorted_logs:
out.write('<hr />\n')
@@ -658,7 +658,7 @@ def drop(revision_url_pattern):
# sort by number of contributions, so the most active people appear at
# the top -- that way we know whom to look at first for commit access
# proposals.
- sorted_contributors = Contributor.all_contributors.values()
+ sorted_contributors = list(Contributor.all_contributors.values())
sorted_contributors.sort()
for c in sorted_contributors:
if c not in seen_contributors:
# C error codes
#
# ====================================================================
-# Copyright (c) 2007 CollabNet. All rights reserved.
+# Copyright (c) 2007-2008 CollabNet. All rights reserved.
#
# * This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -58,7 +58,7 @@ public class ErrorCodes
{
""")
- keys = error_codes.keys()
+ keys = list(error_codes.keys())
keys.sort()
for key in keys:
@@ -93,7 +93,8 @@ STATS = """1/1/2003 70
8/1/2008 307923
9/1/2008 254757
10/1/2008 268081
-11/1/2008 299071"""
+11/1/2008 299071
+12/1/2008 330884"""
def get_date(raw_date):
@@ -12,7 +12,7 @@ class NodePath:
def dump(self):
print (' ' * 3) + self.path
- headers = self.headers.keys()
+ headers = list(self.headers.keys())
headers.sort()
for header in headers:
print (' ' * 6) + header + ': ' + self.headers[header]
@@ -21,7 +21,7 @@ class NodePath:
def dump_revision(rev, nodepaths):
sys.stderr.write('* Normalizing revision ' + rev + '...')
print 'Revision ' + rev
- paths = nodepaths.keys()
+ paths = list(nodepaths.keys())
paths.sort()
for path in paths:
nodepath = nodepaths[path]
#!/usr/bin/env python
-import os, sys
+import os, re, sys
+
+msgstr_re = re.compile('msgstr\[\d+\] "')
def parse_translation(f):
"""Read a single translation entry from the file F and return a
- tuple with the comments, msgid and msgstr. The comments is returned
- as a list of lines which do not end in new-lines. The msgid and
- msgstr are strings, possibly with embedded newlines"""
+ tuple with the comments, msgid, msgid_plural and msgstr. The comments is
+ returned as a list of lines which do not end in new-lines. The msgid is
+ string. The msgid_plural is string or None. The msgstr is a list of
+ strings. The msgid, msgid_plural and msgstr strings can contain embedded
+ newlines"""
line = f.readline()
# Parse comments
comments = []
while 1:
if line.strip() == '':
- return comments, None, None
+ return comments, None, None, None
elif line[0] == '#':
comments.append(line[:-1])
else:
@@ -30,20 +34,51 @@ def parse_translation(f):
break
msgid += '\n' + line[:-1]
+ # Parse optional msgid_plural
+ msgid_plural = None
+ if line[:14] == 'msgid_plural "':
+ if line[-2] != '"':
+ raise RuntimeError("parse error")
+ msgid_plural = line[13:-1]
+ while 1:
+ line = f.readline()
+ if line[0] != '"':
+ break
+ msgid_plural += '\n' + line[:-1]
+
# Parse msgstr
- if line[:8] != 'msgstr "' or line[-2] != '"':
- raise RuntimeError("parse error")
- msgstr = line[7:-1]
- while 1:
- line = f.readline()
- if len(line) == 0 or line[0] != '"':
- break
- msgstr += '\n' + line[:-1]
+ msgstr = []
+ if not msgid_plural:
+ if line[:8] != 'msgstr "' or line[-2] != '"':
+ raise RuntimeError("parse error")
+ msgstr.append(line[7:-1])
+ while 1:
+ line = f.readline()
+ if len(line) == 0 or line[0] != '"':
+ break
+ msgstr[0] += '\n' + line[:-1]
+ else:
+ if line[:7] != 'msgstr[' or line[-2] != '"':
+ raise RuntimeError("parse error")
+ i = 0
+ while 1:
+ matched_msgstr = msgstr_re.match(line)
+ if matched_msgstr:
+ matched_msgstr_len = len(matched_msgstr.group(0))
+ msgstr.append(line[matched_msgstr_len-1:-1])
+ else:
+ break
+ while 1:
+ line = f.readline()
+ if len(line) == 0 or line[0] != '"':
+ break
+ msgstr[i] += '\n' + line[:-1]
+ i += 1
if line.strip() != '':
raise RuntimeError("parse error")
- return comments, msgid, msgstr
+ return comments, msgid, msgid_plural, msgstr
def split_comments(comments):
"""Split COMMENTS into flag comments and other comments. Flag
@@ -74,7 +109,7 @@ def main(argv):
# Read the source po file into a hash
source = {}
while 1:
- comments, msgid, msgstr = parse_translation(sys.stdin)
+ comments, msgid, msgid_plural, msgstr = parse_translation(sys.stdin)
if not comments and msgid is None:
break
if msgid is not None:
@@ -92,7 +127,7 @@ def main(argv):
update_count = 0
untranslated = 0
while 1:
- comments, msgid, msgstr = parse_translation(infile)
+ comments, msgid, msgid_plural, msgstr = parse_translation(infile)
if not comments and msgid is None:
break
if not first:
@@ -114,9 +149,17 @@ def main(argv):
comments = new_comments
outfile.write('\n'.join(comments) + '\n')
outfile.write('msgid ' + msgid + '\n')
- outfile.write('msgstr ' + msgstr + '\n')
- if msgstr == '""':
- untranslated += 1
+ if not msgid_plural:
+ outfile.write('msgstr ' + msgstr[0] + '\n')
+ else:
+ outfile.write('msgid_plural ' + msgid_plural + '\n')
+ n = 0
+ for i in msgstr:
+ outfile.write('msgstr[%s] %s\n' % (n, msgstr[n]))
+ n += 1
+ for m in msgstr:
+ if m == '""':
+ untranslated += 1
# We're done. Tell the user what we did.
print('%d strings updated. '
@@ -87,7 +87,7 @@ def list_frequencies(list):
for item in list:
counter[item] = counter.get(item, 0) + 1
- frequencies = counter.items()
+ frequencies = list(counter.items())
frequencies.sort(_freqtable_cmp)
return frequencies
# their numeric error code values
#
# ====================================================================
-# Copyright (c) 2005 CollabNet. All rights reserved.
+# Copyright (c) 2005, 2008 CollabNet. All rights reserved.
#
# * This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -88,7 +88,7 @@ if __name__ == "__main__":
if sys.argv[1] == 'list':
if len(sys.argv) > 2:
usage_and_exit()
- codes = __svn_error_codes.keys()
+ codes = list(__svn_error_codes.keys())
codes.sort()
# Get a list of code by parsing stdin for apr_err=CODE instances
@@ -117,7 +117,7 @@ class SVNShell(Cmd):
print "Path '%s' not found." % newpath
return
- keys = entries.keys()
+ keys = list(entries.keys())
keys.sort()
print " REV AUTHOR NODE-REV-ID SIZE DATE NAME"
@@ -349,7 +349,7 @@ class Commit(Messenger):
e_ptr, e_baton = svn.delta.make_editor(editor, self.pool)
svn.repos.replay(repos.root_this, e_ptr, e_baton, self.pool)
- self.changelist = editor.get_changes().items()
+ self.changelist = list(editor.get_changes().items())
self.changelist.sort()
# collect the set of groups and the unique sets of params for the options
@@ -357,7 +357,7 @@ class Commit(Messenger):
for path, change in self.changelist:
for (group, params) in self.cfg.which_groups(path):
# turn the params into a hashable object and stash it away
- param_list = params.items()
+ param_list = list(params.items())
param_list.sort()
# collect the set of paths belonging to this group
if (group, tuple(param_list)) in self.groups:
@@ -379,7 +379,7 @@ class Commit(Messenger):
else:
dirs[path[:idx]] = None
- dirlist = dirs.keys()
+ dirlist = list(dirs.keys())
commondir, dirlist = get_commondir(dirlist)
@@ -446,7 +446,7 @@ class PropChange(Messenger):
self.groups = { }
for (group, params) in self.cfg.which_groups(''):
# turn the params into a hashable object and stash it away
- param_list = params.items()
+ param_list = list(params.items())
param_list.sort()
self.groups[group, tuple(param_list)] = params
@@ -537,7 +537,7 @@ class Lock(Messenger):
for path in self.dirlist:
for (group, params) in self.cfg.which_groups(path):
# turn the params into a hashable object and stash it away
- param_list = params.items()
+ param_list = list(params.items())
param_list.sort()
# collect the set of paths belonging to this group
if (group, tuple(param_list)) in self.groups:
@@ -77,10 +77,10 @@ class Config:
(filename, lineno))
def sections(self):
- return self._sections_dict.keys()
+ return list(self._sections_dict.keys())
def options(self, section):
- return self._sections_dict.get(section, {}).keys()
+ return list(self._sections_dict.get(section, {}).keys())
def get(self, section, option, default=None):
return self._sections_dict.get(option, default)
@@ -44,6 +44,7 @@ for <code>mod_dav_svn</code>. Thanks Security Space!</p>
<table style="margin-left: auto; margin-right: auto;" border="0"
cellpadding="5" cellspacing="0">
<tr><th>Date</th><th># Servers</th></tr>
+ <tr><td>December 2008</td><td style="text-align: right">330,884</td></tr>
<tr><td>November 2008</td><td style="text-align: right">299,071</td></tr>
<tr><td>October 2008</td><td style="text-align: right">268,081</td></tr>
<tr><td>September 2008</td><td style="text-align: right">254,757</td></tr>