Author: futatuki
Date: Thu May 14 01:46:35 2020
New Revision: 1877712
URL: http://svn.apache.org/viewvc?rev=1877712&view=rev
Log:
Use safe bytes literals when set string values in working copy entries.
* subversion/tests/cmdline/entries-dump.c
(print_prefix): New function.
(str_value):
- Add argument to specify pool.
- Print human readable value of "value" as is in comment, then set it
as str value by using hex escaped bytes literal.
(entries_dump): Add pool argument to str_value() calls.
(main):
- Print "Entry" class definition as prefix before entry_dump() or tree_dump()
- Style fix on if statement (using blocks).
(): Add include files for assert() and svn_xml_escape_attr_cstring()
* subversion/tests/cmdline/svntest/main.py
(run_entiresdump, run_entriesdump_tree): Move definition of "Entry" class
into generated code by entries-dump execution.
Review By: danielsh
Modified:
subversion/trunk/subversion/tests/cmdline/entries-dump.c
subversion/trunk/subversion/tests/cmdline/svntest/main.py
Modified: subversion/trunk/subversion/tests/cmdline/entries-dump.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/entries-dump.c?rev=1877712&r1=1877711&r2=1877712&view=diff
==
--- subversion/trunk/subversion/tests/cmdline/entries-dump.c (original)
+++ subversion/trunk/subversion/tests/cmdline/entries-dump.c Thu May 14
01:46:35 2020
@@ -23,6 +23,7 @@
#include
#include
+#include
#include
#include
@@ -34,6 +35,7 @@
#include "svn_pools.h"
#include "svn_wc.h"
#include "svn_dirent_uri.h"
+#include "svn_xml.h"
#include "private/svn_wc_private.h"
@@ -41,12 +43,45 @@
#include "../../libsvn_wc/lock.h"
static void
-str_value(const char *name, const char *value)
+print_prefix(void)
+{
+ puts("class Entry(object):\n"
+ " \"\"\"An Entry object represents one node's entry in a pre-1.6"
+ " .svn/entries file.\n\n"
+ "Similar to #svn_wc_entry_t, but not all fields are populated.\n\n"
+ "Entry objects are generated by the 'entries-dump'"
+ " test helper tool.\"\"\"\n\n"
+ " if b'' == '':\n"
+ "def set_strval(self, name, val):\n"
+ " self.__setattr__(name, val)\n"
+ " else:\n"
+ "def set_strval(self, name, val):\n"
+ " self.__setattr__(name, val.decode('utf-8', "
+ "'surrogateescape'))\n");
+}
+
+static void
+str_value(const char *name, const char *value, apr_pool_t *pool)
{
if (value == NULL)
printf("e.%s = None\n", name);
else
-printf("e.%s = '%s'\n", name, value);
+{
+ svn_stringbuf_t *escaped_value = NULL;
+ svn_xml_escape_attr_cstring(&escaped_value, value, pool);
+
+ /* Print the human-readable value. */
+ assert(NULL == strchr(escaped_value->data, '\n'));
+ printf("# e.%s = %s\n", name, escaped_value->data);
+
+ /* Print the machine-readable value. */
+ printf("e.set_strval('%s', b'", name);
+ while(*value)
+{
+ printf("\\x%02x", (unsigned int)(unsigned char)*value++);
+}
+ printf("')\n");
+}
}
@@ -130,38 +165,38 @@ entries_dump(const char *dir_path, svn_w
SVN_ERR_ASSERT(strcmp(key, entry->name) == 0);
printf("e = Entry()\n");
- str_value("name", entry->name);
+ str_value("name", entry->name, pool);
int_value("revision", entry->revision);
- str_value("url", entry->url);
- str_value("repos", entry->repos);
- str_value("uuid", entry->uuid);
+ str_value("url", entry->url, pool);
+ str_value("repos", entry->repos, pool);
+ str_value("uuid", entry->uuid, pool);
int_value("kind", entry->kind);
int_value("schedule", entry->schedule);
bool_value("copied", entry->copied);
bool_value("deleted", entry->deleted);
bool_value("absent", entry->absent);
bool_value("incomplete", entry->incomplete);
- str_value("copyfrom_url", entry->copyfrom_url);
+ str_value("copyfrom_url", entry->copyfrom_url, pool);
int_value("copyfrom_rev", entry->copyfrom_rev);
- str_value("conflict_old", entry->conflict_old);
- str_value("conflict_new", entry->conflict_new);
- str_value("conflict_wrk", entry->conflict_wrk);
- str_value("prejfile", entry->prejfile);
+ str_value("conflict_old", entry->conflict_old, pool);
+ str_value("conflict_new", entry->conflict_new, pool);
+ str_value("conflict_wrk", entry->conflict_wrk, pool);
+ str_value("prejfile", entry->prejfile, pool);
/* skip: text_time */
/* skip: prop_time */
/* skip: checksum */
int_value("cmt_rev", entry->cmt_rev);
/* skip: cmt_date */
- str_value("cmt_author", entry->cmt_author);
- str_value("lock_token", entry->lock_token);
- str_value("lock_owner", entry->lock_owner);
- str_value("lock_comment", entry->lock_comment);
+ str_value(