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. + +