Modified: 
bloodhound/vendor/trac/current/tracopt/versioncontrol/svn/tests/svn_fs.py
URL: 
http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/tracopt/versioncontrol/svn/tests/svn_fs.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/tracopt/versioncontrol/svn/tests/svn_fs.py 
(original)
+++ bloodhound/vendor/trac/current/tracopt/versioncontrol/svn/tests/svn_fs.py 
Thu Feb 13 05:08:02 2014
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (C)2005-2009 Edgewall Software
+# Copyright (C) 2005-2013 Edgewall Software
 # Copyright (C) 2005 Christopher Lenz <cml...@gmx.de>
 # All rights reserved.
 #
@@ -31,6 +31,7 @@ except ImportError:
     has_svn = False
 
 from trac.test import EnvironmentStub, TestSetup
+from trac.tests import compat
 from trac.core import TracError
 from trac.resource import Resource, resource_exists
 from trac.util.concurrency import get_thread_id
@@ -41,9 +42,12 @@ from tracopt.versioncontrol.svn import s
 
 REPOS_PATH = os.path.join(tempfile.gettempdir(), 'trac-svnrepos')
 REPOS_NAME = 'repo'
+URL = 'svn://test'
 
-HEAD = 22
-TETE = 21
+HEAD = 28
+TETE = 26
+
+NATIVE_EOL = '\r\n' if os.name == 'nt' else '\n'
 
 
 class SubversionRepositoryTestSetup(TestSetup):
@@ -85,14 +89,14 @@ class NormalTests(object):
 
     def test_resource_exists(self):
         repos = Resource('repository', REPOS_NAME)
-        self.assertEqual(True, resource_exists(self.env, repos))
-        self.assertEqual(False, resource_exists(self.env, repos(id='xxx')))
+        self.assertTrue(resource_exists(self.env, repos))
+        self.assertFalse(resource_exists(self.env, repos(id='xxx')))
         node = repos.child('source', u'tête')
-        self.assertEqual(True, resource_exists(self.env, node))
-        self.assertEqual(False, resource_exists(self.env, node(id='xxx')))
+        self.assertTrue(resource_exists(self.env, node))
+        self.assertFalse(resource_exists(self.env, node(id='xxx')))
         cset = repos.child('changeset', HEAD)
-        self.assertEqual(True, resource_exists(self.env, cset))
-        self.assertEqual(False, resource_exists(self.env, cset(id=123456)))
+        self.assertTrue(resource_exists(self.env, cset))
+        self.assertFalse(resource_exists(self.env, cset(id=123456)))
 
     def test_repos_normalize_path(self):
         self.assertEqual('/', self.repos.normalize_path('/'))
@@ -115,33 +119,32 @@ class NormalTests(object):
 
     def test_rev_navigation(self):
         self.assertEqual(1, self.repos.oldest_rev)
-        self.assertEqual(None, self.repos.previous_rev(0))
-        self.assertEqual(None, self.repos.previous_rev(1))
+        self.assertIsNone(self.repos.previous_rev(0))
+        self.assertIsNone(self.repos.previous_rev(1))
         self.assertEqual(HEAD, self.repos.youngest_rev)
         self.assertEqual(6, self.repos.next_rev(5))
         self.assertEqual(7, self.repos.next_rev(6))
         # ...
-        self.assertEqual(None, self.repos.next_rev(HEAD))
+        self.assertIsNone(self.repos.next_rev(HEAD))
         self.assertRaises(NoSuchChangeset, self.repos.normalize_rev, HEAD + 1)
 
     def test_rev_path_navigation(self):
         self.assertEqual(1, self.repos.oldest_rev)
-        self.assertEqual(None, self.repos.previous_rev(0, u'tête'))
-        self.assertEqual(None, self.repos.previous_rev(1, u'tête'))
+        self.assertIsNone(self.repos.previous_rev(0, u'tête'))
+        self.assertIsNone(self.repos.previous_rev(1, u'tête'))
         self.assertEqual(HEAD, self.repos.youngest_rev)
         self.assertEqual(6, self.repos.next_rev(5, u'tête'))
         self.assertEqual(13, self.repos.next_rev(6, u'tête'))
         # ...
-        self.assertEqual(None, self.repos.next_rev(HEAD, u'tête'))
+        self.assertIsNone(self.repos.next_rev(HEAD, u'tête'))
         # test accentuated characters
-        self.assertEqual(None,
-                         self.repos.previous_rev(17, 
u'tête/R\xe9sum\xe9.txt'))
+        self.assertIsNone(self.repos.previous_rev(17, 
u'tête/R\xe9sum\xe9.txt'))
         self.assertEqual(17, self.repos.next_rev(16, 
u'tête/R\xe9sum\xe9.txt'))
 
     def test_has_node(self):
-        self.assertEqual(False, self.repos.has_node(u'/tête/dir1', 3))
-        self.assertEqual(True, self.repos.has_node(u'/tête/dir1', 4))
-        self.assertEqual(True, self.repos.has_node(u'/tête/dir1'))
+        self.assertFalse(self.repos.has_node(u'/tête/dir1', 3))
+        self.assertTrue(self.repos.has_node(u'/tête/dir1', 4))
+        self.assertTrue(self.repos.has_node(u'/tête/dir1'))
 
     def test_get_node(self):
         node = self.repos.get_node(u'/tête')
@@ -150,7 +153,7 @@ class NormalTests(object):
         self.assertEqual(Node.DIRECTORY, node.kind)
         self.assertEqual(HEAD, node.rev)
         self.assertEqual(TETE, node.created_rev)
-        self.assertEqual(datetime(2007, 4, 30, 17, 45, 26, 234375, utc),
+        self.assertEqual(datetime(2013, 4, 28, 5, 36, 6, 29637, utc),
                          node.last_modified)
         node = self.repos.get_node(u'/tête/README.txt')
         self.assertEqual('README.txt', node.name)
@@ -195,9 +198,9 @@ class NormalTests(object):
 
     def test_get_dir_content(self):
         node = self.repos.get_node(u'/tête')
-        self.assertEqual(None, node.content_length)
-        self.assertEqual(None, node.content_type)
-        self.assertEqual(None, node.get_content())
+        self.assertIsNone(node.content_length)
+        self.assertIsNone(node.content_type)
+        self.assertIsNone(node.get_content())
 
     def test_get_file_content(self):
         node = self.repos.get_node(u'/tête/README.txt')
@@ -216,6 +219,141 @@ class NormalTests(object):
         self.assertEqual('native', props['svn:eol-style'])
         self.assertEqual('text/plain', props['svn:mime-type'])
 
+    def test_get_file_content_without_native_eol_style(self):
+        f = self.repos.get_node(u'/tête/README.txt', 2)
+        props = f.get_properties()
+        self.assertIsNone(props.get('svn:eol-style'))
+        self.assertEqual('A text.\n', f.get_content().read())
+        self.assertEqual('A text.\n', f.get_processed_content().read())
+
+    def test_get_file_content_with_native_eol_style(self):
+        f = self.repos.get_node(u'/tête/README.txt', 3)
+        props = f.get_properties()
+        self.assertEqual('native', props.get('svn:eol-style'))
+
+        self.repos.params['eol_style'] = 'native'
+        self.assertEqual('A test.\n', f.get_content().read())
+        self.assertEqual('A test.' + NATIVE_EOL,
+                         f.get_processed_content().read())
+
+        self.repos.params['eol_style'] = 'LF'
+        self.assertEqual('A test.\n', f.get_content().read())
+        self.assertEqual('A test.\n', f.get_processed_content().read())
+
+        self.repos.params['eol_style'] = 'CRLF'
+        self.assertEqual('A test.\n', f.get_content().read())
+        self.assertEqual('A test.\r\n', f.get_processed_content().read())
+
+        self.repos.params['eol_style'] = 'CR'
+        self.assertEqual('A test.\n', f.get_content().read())
+        self.assertEqual('A test.\r', f.get_processed_content().read())
+        # check that the hint is stronger than the repos default
+        self.assertEqual('A test.\r\n',
+                         f.get_processed_content(eol_hint='CRLF').read())
+
+    def test_get_file_content_with_native_eol_style_and_no_keywords_28(self):
+        f = self.repos.get_node(u'/branches/v4/README.txt', 28)
+        props = f.get_properties()
+        self.assertEqual('native', props.get('svn:eol-style'))
+        self.assertIsNone(props.get('svn:keywords'))
+
+        self.assertEqual(
+            'A test.\n' +
+            '# $Rev$ is not substituted with no svn:keywords.\n',
+            f.get_content().read())
+        self.assertEqual(
+            'A test.\r\n' +
+            '# $Rev$ is not substituted with no svn:keywords.\r\n',
+            f.get_processed_content(eol_hint='CRLF').read())
+
+    def test_get_file_content_with_keyword_substitution_23(self):
+        f = self.repos.get_node(u'/tête/Résumé.txt', 23)
+        props = f.get_properties()
+        self.assertEqual('Revision Author URL', props['svn:keywords'])
+        self.assertEqual('''\
+# Simple test for svn:keywords property substitution (#717)
+# $Rev: 23 $:     Revision of last commit
+# $Author: cboos $:  Author of last commit
+# $Date$:    Date of last commit (not substituted)
+
+Now with fixed width fields:
+# $URL:: svn://test/tête/Résumé.txt                $ the configured URL
+# $HeadURL:: svn://test/tête/Résumé.txt            $ same
+# $URL:: svn://test/tê#$ same, but truncated
+
+En r\xe9sum\xe9 ... \xe7a marche.
+''', f.get_processed_content().read())
+    # Note: "En résumé ... ça marche." in the content is really encoded in
+    #       latin1 in the file, and our substitutions are UTF-8 encoded...
+    #       This is expected.
+
+    def test_get_file_content_with_keyword_substitution_24(self):
+        f = self.repos.get_node(u'/tête/Résumé.txt', 24)
+        props = f.get_properties()
+        self.assertEqual('Revision Author URL Id', props['svn:keywords'])
+        self.assertEqual('''\
+# Simple test for svn:keywords property substitution (#717)
+# $Rev: 24 $:     Revision of last commit
+# $Author: cboos $:  Author of last commit
+# $Date$:    Date of last commit (now substituted)
+# $Id: Résumé.txt 24 2013-04-27 14:38:50Z cboos $:      Combination
+
+Now with fixed width fields:
+# $URL:: svn://test/t\xc3\xaate/R\xc3\xa9sum\xc3\xa9.txt                $ the 
configured URL
+# $HeadURL:: svn://test/t\xc3\xaate/R\xc3\xa9sum\xc3\xa9.txt            $ same
+# $URL:: svn://test/t\xc3\xaa#$ same, but truncated
+# $Header::                                           $ combination with URL
+
+En r\xe9sum\xe9 ... \xe7a marche.
+''', f.get_processed_content().read())
+
+    def test_get_file_content_with_keyword_substitution_25(self):
+        f = self.repos.get_node(u'/tête/Résumé.txt', 25)
+        props = f.get_properties()
+        self.assertEqual('Revision Author URL Date Id Header',
+                         props['svn:keywords'])
+        self.assertEqual('''\
+# Simple test for svn:keywords property substitution (#717)
+# $Rev: 25 $:     Revision of last commit
+# $Author: cboos $:  Author of last commit
+# $Date: 2013-04-27 14:43:15 +0000 (Sat, 27 Apr 2013) $:    Date of last 
commit (now really substituted)
+# $Id: Résumé.txt 25 2013-04-27 14:43:15Z cboos $:      Combination
+
+Now with fixed width fields:
+# $URL:: svn://test/tête/Résumé.txt                $ the configured URL
+# $HeadURL:: svn://test/tête/Résumé.txt            $ same
+# $URL:: svn://test/tê#$ same, but truncated
+# $Header:: svn://test/t\xc3\xaate/R\xc3\xa9sum\xc3\xa9.txt 25 2013-04-#$ 
combination with URL
+
+En r\xe9sum\xe9 ... \xe7a marche.
+''', f.get_processed_content().read())
+
+    def test_get_file_content_with_keyword_substitution_27(self):
+        f = self.repos.get_node(u'/tête/Résumé.txt', 27)
+        props = f.get_properties()
+        self.assertEqual('Revision Author URL Date Id Header',
+                         props['svn:keywords'])
+        self.assertEqual('''\
+# Simple test for svn:keywords property substitution (#717)
+# $Rev: 26 $:     Revision of last commit
+# $Author: jomae $:  Author of last commit
+# $Date: 2013-04-28 05:36:06 +0000 (Sun, 28 Apr 2013) $:    Date of last 
commit (now really substituted)
+# $Id: Résumé.txt 26 2013-04-28 05:36:06Z jomae $:      Combination
+
+Now with fixed width fields:
+# $URL:: svn://test/tête/Résumé.txt                $ the configured URL
+# $HeadURL:: svn://test/tête/Résumé.txt            $ same
+# $URL:: svn://test/tê#$ same, but truncated
+# $Header:: svn://test/t\xc3\xaate/R\xc3\xa9sum\xc3\xa9.txt 26 2013-04-#$ 
combination with URL
+
+Overlapped keywords:
+# $Xxx$Rev: 26 $Xxx$
+# $Rev: 26 $Xxx$Rev: 26 $
+# $Rev: 26 $Rev$Rev: 26 $
+
+En r\xe9sum\xe9 ... \xe7a marche.
+''', f.get_processed_content().read())
+
     def test_created_path_rev(self):
         node = self.repos.get_node(u'/tête/README3.txt', 15)
         self.assertEqual(15, node.rev)
@@ -230,6 +368,28 @@ class NormalTests(object):
         self.assertEqual(3, node.created_rev)
         self.assertEqual(u'tête/README.txt', node.created_path)
 
+    def test_get_annotations(self):
+        # svn_client_blame2() requires a canonical uri since Subversion 1.7.
+        # If the uri is not canonical, assertion raises (#11167).
+        node = self.repos.get_node(u'/tête/R\xe9sum\xe9.txt', 25)
+        self.assertEqual([23, 23, 23, 25, 24, 23, 23, 23, 23, 23, 24, 23, 20],
+                         node.get_annotations())
+
+    def test_get_annotations_lower_drive_letter(self):
+        # If the drive letter in the uri is lower case on Windows, a
+        # SubversionException raises (#10514).
+        drive, tail = os.path.splitdrive(REPOS_PATH)
+        repos_path = drive.lower() + tail
+        DbRepositoryProvider(self.env).add_repository('lowercase', repos_path,
+                                                      'direct-svnfs')
+        repos = self.env.get_repository('lowercase')
+        node = repos.get_node(u'/tête/R\xe9sum\xe9.txt', 25)
+        self.assertEqual([23, 23, 23, 25, 24, 23, 23, 23, 23, 23, 24, 23, 20],
+                         node.get_annotations())
+
+    if os.name != 'nt':
+        del test_get_annotations_lower_drive_letter
+
     # Revision Log / node history
 
     def test_get_node_history(self):
@@ -538,6 +698,16 @@ class NormalTests(object):
         self.assertEqual(u'Chez moi ça marche\n', chgset.message)
         self.assertEqual(u'Jonas Borgström', chgset.author)
 
+    def test_canonical_repos_path(self):
+        # Assertion `svn_dirent_is_canonical` with leading double slashes
+        # in repository path if os.name == 'posix' (#10390)
+        DbRepositoryProvider(self.env).add_repository(
+            'canonical-path', '//' + REPOS_PATH.lstrip('/'), 'direct-svnfs')
+        repos = self.env.get_repository('canonical-path')
+        self.assertEqual(REPOS_PATH, repos.path)
+
+    if os.name != 'posix':
+        del test_canonical_repos_path
 
 
 class ScopedTests(object):
@@ -561,17 +731,17 @@ class ScopedTests(object):
 
     def test_rev_navigation(self):
         self.assertEqual(1, self.repos.oldest_rev)
-        self.assertEqual(None, self.repos.previous_rev(0))
+        self.assertIsNone(self.repos.previous_rev(0))
         self.assertEqual(1, self.repos.previous_rev(2))
         self.assertEqual(TETE, self.repos.youngest_rev)
         self.assertEqual(2, self.repos.next_rev(1))
         self.assertEqual(3, self.repos.next_rev(2))
         # ...
-        self.assertEqual(None, self.repos.next_rev(TETE))
+        self.assertIsNone(self.repos.next_rev(TETE))
 
     def test_has_node(self):
-        self.assertEqual(False, self.repos.has_node('/dir1', 3))
-        self.assertEqual(True, self.repos.has_node('/dir1', 4))
+        self.assertFalse(self.repos.has_node('/dir1', 3))
+        self.assertTrue(self.repos.has_node('/dir1', 4))
 
     def test_get_node(self):
         node = self.repos.get_node('/dir1')
@@ -625,9 +795,9 @@ class ScopedTests(object):
 
     def test_get_dir_content(self):
         node = self.repos.get_node('/dir1')
-        self.assertEqual(None, node.content_length)
-        self.assertEqual(None, node.content_type)
-        self.assertEqual(None, node.get_content())
+        self.assertIsNone(node.content_length)
+        self.assertIsNone(node.content_type)
+        self.assertIsNone(node.get_content())
 
     def test_get_file_content(self):
         node = self.repos.get_node('/README.txt')
@@ -808,14 +978,14 @@ class ScopedTests(object):
 class RecentPathScopedTests(object):
 
     def test_rev_navigation(self):
-        self.assertEqual(False, self.repos.has_node('/', 1))
-        self.assertEqual(False, self.repos.has_node('/', 2))
-        self.assertEqual(False, self.repos.has_node('/', 3))
-        self.assertEqual(True, self.repos.has_node('/', 4))
+        self.assertFalse(self.repos.has_node('/', 1))
+        self.assertFalse(self.repos.has_node('/', 2))
+        self.assertFalse(self.repos.has_node('/', 3))
+        self.assertTrue(self.repos.has_node('/', 4))
         # We can't make this work anymore because of #5213.
         # self.assertEqual(4, self.repos.oldest_rev)
         self.assertEqual(1, self.repos.oldest_rev) # should really be 4...
-        self.assertEqual(None, self.repos.previous_rev(4))
+        self.assertIsNone(self.repos.previous_rev(4))
 
 
 class NonSelfContainedScopedTests(object):
@@ -847,10 +1017,12 @@ class SubversionRepositoryTestCase(unitt
     def setUp(self):
         self.env = EnvironmentStub()
         repositories = self.env.config['repositories']
-        DbRepositoryProvider(self.env).add_repository(REPOS_NAME, self.path,
-                                                      'direct-svnfs')
+        dbprovider = DbRepositoryProvider(self.env)
+        dbprovider.add_repository(REPOS_NAME, self.path, 'direct-svnfs')
+        dbprovider.modify_repository(REPOS_NAME, {'url': URL})
         self.repos = self.env.get_repository(REPOS_NAME)
 
+
     def tearDown(self):
         self.env.reset_db()
         # needed to avoid issue with 'WindowsError: The process cannot access
@@ -864,8 +1036,9 @@ class SvnCachedRepositoryTestCase(unitte
 
     def setUp(self):
         self.env = EnvironmentStub()
-        DbRepositoryProvider(self.env).add_repository(REPOS_NAME, self.path,
-                                                      'svn')
+        dbprovider = DbRepositoryProvider(self.env)
+        dbprovider.add_repository(REPOS_NAME, self.path, 'svn')
+        dbprovider.modify_repository(REPOS_NAME, {'url': URL})
         self.repos = self.env.get_repository(REPOS_NAME)
         self.repos.sync()
 
@@ -912,5 +1085,4 @@ def suite():
     return suite
 
 if __name__ == '__main__':
-    runner = unittest.TextTestRunner()
-    runner.run(suite())
+    unittest.main(defaultTest='suite')

Modified: 
bloodhound/vendor/trac/current/tracopt/versioncontrol/svn/tests/svnrepos.dump
URL: 
http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/tracopt/versioncontrol/svn/tests/svnrepos.dump?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- 
bloodhound/vendor/trac/current/tracopt/versioncontrol/svn/tests/svnrepos.dump 
(original)
+++ 
bloodhound/vendor/trac/current/tracopt/versioncontrol/svn/tests/svnrepos.dump 
Thu Feb 13 05:08:02 2014
@@ -16,10 +16,6 @@ Revision-number: 1
 Prop-content-length: 124
 Content-length: 124
 
-K 7
-svn:log
-V 25
-Initial directory layout.
 K 10
 svn:author
 V 4
@@ -28,6 +24,10 @@ K 8
 svn:date
 V 27
 2005-04-01T10:00:52.353248Z
+K 7
+svn:log
+V 25
+Initial directory layout.
 PROPS-END
 
 Node-path: branches
@@ -61,10 +61,6 @@ Revision-number: 2
 Prop-content-length: 112
 Content-length: 112
 
-K 7
-svn:log
-V 13
-Added README.
 K 10
 svn:author
 V 4
@@ -73,6 +69,10 @@ K 8
 svn:date
 V 27
 2005-04-01T13:12:18.216267Z
+K 7
+svn:log
+V 13
+Added README.
 PROPS-END
 
 Node-path: tête/README.txt
@@ -92,11 +92,6 @@ Revision-number: 3
 Prop-content-length: 113
 Content-length: 113
 
-K 7
-svn:log
-V 14
-Fixed README.
-
 K 10
 svn:author
 V 4
@@ -105,6 +100,11 @@ K 8
 svn:date
 V 27
 2005-04-01T13:24:58.234643Z
+K 7
+svn:log
+V 14
+Fixed README.
+
 PROPS-END
 
 Node-path: tête/README.txt
@@ -117,13 +117,13 @@ Text-content-sha1: 6aade8dde7d1b86b451b5
 Content-length: 83
 
 K 13
-svn:mime-type
-V 10
-text/plain
-K 13
 svn:eol-style
 V 6
 native
+K 13
+svn:mime-type
+V 10
+text/plain
 PROPS-END
 A test.
 
@@ -132,10 +132,6 @@ Revision-number: 4
 Prop-content-length: 116
 Content-length: 116
 
-K 7
-svn:log
-V 17
-More directories.
 K 10
 svn:author
 V 4
@@ -144,6 +140,10 @@ K 8
 svn:date
 V 27
 2005-04-01T15:42:35.450595Z
+K 7
+svn:log
+V 17
+More directories.
 PROPS-END
 
 Node-path: tête/dir1
@@ -177,10 +177,6 @@ Revision-number: 5
 Prop-content-length: 117
 Content-length: 117
 
-K 7
-svn:log
-V 18
-Moved directories.
 K 10
 svn:author
 V 4
@@ -189,6 +185,10 @@ K 8
 svn:date
 V 27
 2005-04-01T16:25:39.658099Z
+K 7
+svn:log
+V 18
+Moved directories.
 PROPS-END
 
 Node-path: tête/dir1/dir2
@@ -217,10 +217,6 @@ Revision-number: 6
 Prop-content-length: 118
 Content-length: 118
 
-K 7
-svn:log
-V 19
-More things to read
 K 10
 svn:author
 V 4
@@ -229,6 +225,10 @@ K 8
 svn:date
 V 27
 2005-04-01T18:56:46.985846Z
+K 7
+svn:log
+V 19
+More things to read
 PROPS-END
 
 Node-path: tête/README2.txt
@@ -244,10 +244,6 @@ Revision-number: 7
 Prop-content-length: 151
 Content-length: 151
 
-K 7
-svn:log
-V 42
-test the tag operation (copy of directory)
 K 10
 svn:author
 V 13
@@ -256,6 +252,10 @@ K 8
 svn:date
 V 27
 2005-04-14T15:06:20.717616Z
+K 7
+svn:log
+V 42
+test the tag operation (copy of directory)
 PROPS-END
 
 Node-path: tags/v1
@@ -269,10 +269,6 @@ Revision-number: 8
 Prop-content-length: 124
 Content-length: 124
 
-K 7
-svn:log
-V 15
-Fix stuff in v1
 K 10
 svn:author
 V 13
@@ -281,6 +277,10 @@ K 8
 svn:date
 V 27
 2005-04-22T08:57:33.499643Z
+K 7
+svn:log
+V 15
+Fix stuff in v1
 PROPS-END
 
 Node-path: branches/v1x
@@ -294,10 +294,6 @@ Revision-number: 9
 Prop-content-length: 127
 Content-length: 127
 
-K 7
-svn:log
-V 18
-Now that's the fix
 K 10
 svn:author
 V 13
@@ -306,6 +302,10 @@ K 8
 svn:date
 V 27
 2005-04-22T08:59:24.308979Z
+K 7
+svn:log
+V 18
+Now that's the fix
 PROPS-END
 
 Node-path: branches/v1x/README.txt
@@ -323,10 +323,6 @@ Revision-number: 10
 Prop-content-length: 141
 Content-length: 141
 
-K 7
-svn:log
-V 32
-Tagging v1.1 from the fix branch
 K 10
 svn:author
 V 13
@@ -335,6 +331,10 @@ K 8
 svn:date
 V 27
 2005-04-22T09:00:34.549980Z
+K 7
+svn:log
+V 32
+Tagging v1.1 from the fix branch
 PROPS-END
 
 Node-path: tags/v1.1
@@ -348,10 +348,6 @@ Revision-number: 11
 Prop-content-length: 191
 Content-length: 191
 
-K 7
-svn:log
-V 82
-''(a few months later)'' We don't need the fix branch anymore, 1.1 is 
super-stable
 K 10
 svn:author
 V 13
@@ -360,6 +356,10 @@ K 8
 svn:date
 V 27
 2005-04-22T09:01:38.361737Z
+K 7
+svn:log
+V 82
+''(a few months later)'' We don't need the fix branch anymore, 1.1 is 
super-stable
 PROPS-END
 
 Node-path: branches/v1x
@@ -370,10 +370,6 @@ Revision-number: 12
 Prop-content-length: 166
 Content-length: 166
 
-K 7
-svn:log
-V 57
-''(a few years later)'' Argh... v1.1 was buggy, after all
 K 10
 svn:author
 V 13
@@ -382,6 +378,10 @@ K 8
 svn:date
 V 27
 2005-04-22T09:06:37.011174Z
+K 7
+svn:log
+V 57
+''(a few years later)'' Argh... v1.1 was buggy, after all
 PROPS-END
 
 Node-path: branches/v1x
@@ -395,10 +395,6 @@ Revision-number: 13
 Prop-content-length: 143
 Content-length: 143
 
-K 7
-svn:log
-V 43
-Setting property on the repository_dir root
 K 10
 svn:author
 V 5
@@ -407,6 +403,10 @@ K 8
 svn:date
 V 27
 2005-11-17T15:13:16.197772Z
+K 7
+svn:log
+V 43
+Setting property on the repository_dir root
 PROPS-END
 
 Node-path: 
@@ -441,10 +441,6 @@ Revision-number: 14
 Prop-content-length: 119
 Content-length: 119
 
-K 7
-svn:log
-V 19
-Testing rename+edit
 K 10
 svn:author
 V 5
@@ -453,6 +449,10 @@ K 8
 svn:date
 V 27
 2005-11-30T08:47:03.467814Z
+K 7
+svn:log
+V 19
+Testing rename+edit
 PROPS-END
 
 Node-path: tête/README3.txt
@@ -478,10 +478,6 @@ Revision-number: 15
 Prop-content-length: 162
 Content-length: 162
 
-K 7
-svn:log
-V 62
-Removing original file, just before committing the wc->wc copy
 K 10
 svn:author
 V 5
@@ -490,6 +486,10 @@ K 8
 svn:date
 V 27
 2005-12-06T12:47:36.271020Z
+K 7
+svn:log
+V 62
+Removing original file, just before committing the wc->wc copy
 PROPS-END
 
 Node-path: tags/v1.1/README2.txt
@@ -500,10 +500,6 @@ Revision-number: 16
 Prop-content-length: 138
 Content-length: 138
 
-K 7
-svn:log
-V 38
-Committing wc->wc copy + local changes
 K 10
 svn:author
 V 5
@@ -512,6 +508,10 @@ K 8
 svn:date
 V 27
 2005-12-06T12:47:51.122376Z
+K 7
+svn:log
+V 38
+Committing wc->wc copy + local changes
 PROPS-END
 
 Node-path: branches/v2
@@ -536,10 +536,6 @@ Revision-number: 17
 Prop-content-length: 139
 Content-length: 139
 
-K 7
-svn:log
-V 39
-Test des caractères accentués (cp437)
 K 10
 svn:author
 V 5
@@ -548,6 +544,10 @@ K 8
 svn:date
 V 27
 2006-03-31T12:30:25.421875Z
+K 7
+svn:log
+V 39
+Test des caractères accentués (cp437)
 PROPS-END
 
 Node-path: tête/Résumé.txt
@@ -566,10 +566,6 @@ Revision-number: 18
 Prop-content-length: 124
 Content-length: 124
 
-K 7
-svn:log
-V 24
-Prepare for fancy rename
 K 10
 svn:author
 V 5
@@ -578,6 +574,10 @@ K 8
 svn:date
 V 27
 2006-09-27T10:40:38.671875Z
+K 7
+svn:log
+V 24
+Prepare for fancy rename
 PROPS-END
 
 Node-path: tête/Xprimary_proc
@@ -606,10 +606,6 @@ Revision-number: 19
 Prop-content-length: 145
 Content-length: 145
 
-K 7
-svn:log
-V 45
-Fancy copy+rename resulting in double delete.
 K 10
 svn:author
 V 5
@@ -618,6 +614,10 @@ K 8
 svn:date
 V 27
 2006-09-27T10:41:27.484375Z
+K 7
+svn:log
+V 45
+Fancy copy+rename resulting in double delete.
 PROPS-END
 
 Node-path: tête/mpp_proc
@@ -650,11 +650,6 @@ Revision-number: 20
 Prop-content-length: 132
 Content-length: 132
 
-K 7
-svn:log
-V 20
-Chez moi ça marche
-
 K 10
 svn:author
 V 16
@@ -663,6 +658,11 @@ K 8
 svn:date
 V 27
 2006-12-04T10:47:24.015625Z
+K 7
+svn:log
+V 20
+Chez moi ça marche
+
 PROPS-END
 
 Node-path: tête/Résumé.txt
@@ -680,10 +680,6 @@ Revision-number: 21
 Prop-content-length: 139
 Content-length: 139
 
-K 7
-svn:log
-V 39
-copy from outside of the scope + delete
 K 10
 svn:author
 V 5
@@ -692,6 +688,10 @@ K 8
 svn:date
 V 27
 2007-04-30T17:45:26.234375Z
+K 7
+svn:log
+V 39
+copy from outside of the scope + delete
 PROPS-END
 
 Node-path: tête/v2
@@ -713,10 +713,6 @@ Revision-number: 22
 Prop-content-length: 130
 Content-length: 130
 
-K 7
-svn:log
-V 30
-test delete after copy (#4900)
 K 10
 svn:author
 V 5
@@ -725,6 +721,10 @@ K 8
 svn:date
 V 27
 2010-02-26T14:48:19.377000Z
+K 7
+svn:log
+V 30
+test delete after copy (#4900)
 PROPS-END
 
 Node-path: branches/v3
@@ -746,3 +746,257 @@ Node-path: branches/v3/mpp_proc
 Node-action: delete
 
 
+Revision-number: 23
+Prop-content-length: 137
+Content-length: 137
+
+K 10
+svn:author
+V 5
+cboos
+K 8
+svn:date
+V 27
+2013-04-27T13:00:34.579240Z
+K 7
+svn:log
+V 37
+Verifying keyword substitution (#717)
+PROPS-END
+
+Node-path: tête/Résumé.txt
+Node-kind: file
+Node-action: change
+Prop-content-length: 53
+Text-content-length: 421
+Text-content-md5: c9a55f49668aff4b30606a4821f13c3a
+Text-content-sha1: 1b7c636fcaed8360bbf39589655b4e5b37b4ea9a
+Content-length: 474
+
+K 12
+svn:keywords
+V 19
+Revision Author URL
+PROPS-END
+# Simple test for svn:keywords property substitution (#717)
+# $Rev$:     Revision of last commit
+# $Author$:  Author of last commit
+# $Date$:    Date of last commit (not substituted)
+
+Now with fixed width fields:
+# $URL::                                              $ the configured URL
+# $HeadURL::                                          $ same
+# $URL::                $ same, but truncated
+
+En résumé ... ça marche.
+
+
+Revision-number: 24
+Prop-content-length: 144
+Content-length: 144
+
+K 10
+svn:author
+V 5
+cboos
+K 8
+svn:date
+V 27
+2013-04-27T14:38:50.346459Z
+K 7
+svn:log
+V 44
+Adding Id keyword and testing Id and Header.
+PROPS-END
+
+Node-path: tête/Résumé.txt
+Node-kind: file
+Node-action: change
+Prop-content-length: 56
+Text-content-length: 523
+Text-content-md5: 2387ca7586289babae8f3714750677b6
+Text-content-sha1: 983c9d507f95133315e9a8942a1a9161e69a0644
+Content-length: 579
+
+K 12
+svn:keywords
+V 22
+Revision Author URL Id
+PROPS-END
+# Simple test for svn:keywords property substitution (#717)
+# $Rev$:     Revision of last commit
+# $Author$:  Author of last commit
+# $Date$:    Date of last commit (now substituted)
+# $Id$:      Combination
+
+Now with fixed width fields:
+# $URL::                                              $ the configured URL
+# $HeadURL::                                          $ same
+# $URL::                $ same, but truncated
+# $Header::                                           $ combination with URL
+
+En résumé ... ça marche.
+
+
+Revision-number: 25
+Prop-content-length: 132
+Content-length: 132
+
+K 10
+svn:author
+V 5
+cboos
+K 8
+svn:date
+V 27
+2013-04-27T14:43:15.010597Z
+K 7
+svn:log
+V 32
+Adding Header and Date keywords.
+PROPS-END
+
+Node-path: tête/Résumé.txt
+Node-kind: file
+Node-action: change
+Prop-content-length: 68
+Text-content-length: 530
+Text-content-md5: 6f322fe2e36a5340ab89a45c5e1a99ea
+Text-content-sha1: 796511deb4b792770ffa96c72665d04013e7e351
+Content-length: 598
+
+K 12
+svn:keywords
+V 34
+Revision Author URL Date Id Header
+PROPS-END
+# Simple test for svn:keywords property substitution (#717)
+# $Rev$:     Revision of last commit
+# $Author$:  Author of last commit
+# $Date$:    Date of last commit (now really substituted)
+# $Id$:      Combination
+
+Now with fixed width fields:
+# $URL::                                              $ the configured URL
+# $HeadURL::                                          $ same
+# $URL::                $ same, but truncated
+# $Header::                                           $ combination with URL
+
+En résumé ... ça marche.
+
+
+Revision-number: 26
+Prop-content-length: 99
+Content-length: 99
+
+K 10
+svn:author
+V 5
+jomae
+K 8
+svn:date
+V 27
+2013-04-28T05:36:06.029637Z
+K 7
+svn:log
+V 0
+
+PROPS-END
+
+Node-path: tête/Résumé.txt
+Node-kind: file
+Node-action: change
+Text-content-length: 600
+Text-content-md5: 72f0bd05783567014a5c9b5b25624bd5
+Text-content-sha1: c7c17825559c15a3ac12cfdbc25c3bfeecc33444
+Content-length: 600
+
+# Simple test for svn:keywords property substitution (#717)
+# $Rev$:     Revision of last commit
+# $Author$:  Author of last commit
+# $Date$:    Date of last commit (now really substituted)
+# $Id$:      Combination
+
+Now with fixed width fields:
+# $URL::                                              $ the configured URL
+# $HeadURL::                                          $ same
+# $URL::                $ same, but truncated
+# $Header::                                           $ combination with URL
+
+Overlapped keywords:
+# $Xxx$Rev$Xxx$
+# $Rev$Xxx$Rev$
+# $Rev$Rev$Rev$
+
+En résumé ... ça marche.
+
+
+Revision-number: 27
+Prop-content-length: 99
+Content-length: 99
+
+K 10
+svn:author
+V 5
+jomae
+K 8
+svn:date
+V 27
+2013-04-28T06:04:22.547569Z
+K 7
+svn:log
+V 0
+
+PROPS-END
+
+Node-path: 
+Node-kind: dir
+Node-action: change
+Prop-content-length: 40
+Content-length: 40
+
+K 10
+svn:ignore
+V 9
+*.py[co]
+
+PROPS-END
+
+
+Revision-number: 28
+Prop-content-length: 99
+Content-length: 99
+
+K 10
+svn:author
+V 5
+jomae
+K 8
+svn:date
+V 27
+2013-05-02T14:15:35.530857Z
+K 7
+svn:log
+V 0
+
+PROPS-END
+
+Node-path: branches/v4
+Node-kind: dir
+Node-action: add
+Node-copyfrom-rev: 27
+Node-copyfrom-path: tête
+
+
+Node-path: branches/v4/README.txt
+Node-kind: file
+Node-action: change
+Text-content-length: 57
+Text-content-md5: 59d8741096e01b80360963223f5c7394
+Text-content-sha1: f0c8bf5fedb3b2c06381e8dba6957a7d36667027
+Content-length: 57
+
+A test.
+# $Rev$ is not substituted with no svn:keywords.
+
+


Reply via email to