You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Neels Hofmeyr <ne...@elego.de> on 2008/08/24 01:52:55 UTC

[PATCH] tests: cmdline: actual disk tree has wrong paths

Hi,

in the cmdline tests, after dumping "actual disk" trees to screen, it came
to my attention that all nodes below a depth of two have a wrong node.path.

This is of course wrong, but has no bad effects in the current cmdline
tests. But since the tests now print out these trees in the error output, it
becomes confusing.

It is particularly annoying when pasting the printout to a py script, since
it requires a degree of figuring out and editing.


In the following example, I simulated a failure of update_tests.py 9 on
today's trunk, by adding a fantasy node to the expected disk tree. It prints
out the following actual disk tree:

[[[
ACTUAL DISK TREE:
svntest.wc.State('', {
  'iota'              : Item(contents="This is the file 'iota'.\n"),
  'A'                 : Item(),
  'A/mu'              : Item(contents="This is the file 'mu'.\n"),
  'A/C'               : Item(),
  'A/B'               : Item(),
  'B/lambda'          : Item(contents="This is the file 'lambda'.\n"),
  'B/F'               : Item(),
  'B/E'               : Item(),
  'E/beta'            : Item(contents="This is the file 'beta'.\n"),
  'E/alpha'           : Item(contents="This is the file 'alpha'.\n"),
  'A/D'               : Item(),
  'D/gamma'           : Item(contents="This is the file 'gamma'.\n"),
  'D/G'               : Item(),
  'G/tau'             : Item(contents="This is the file 'tau'.\n"),
  'G/pi'              : Item(contents="This is the file 'pi'.\n"),
  'G/rho'             : Item(contents="This is the file 'rho'.\n"),
  'D/H'               : Item(),
  'H/chi'             : Item(contents="This is the file 'chi'.\n"),
  'H/psi'             : Item(contents="This is the file 'psi'.\n"),
  'H/omega'           : Item(contents="This is the file 'omega'.\n"),
})
]]]

This tree was read from disk and is actually well structured (node G
actually sits below node D, which sits below node A, etc.).

Each node has a PATH element, which holds its "full" path within the
tree structure as a string. The nodes are printed out using this PATH.

Now, note that each PATH only has two node names. What should have been
'A/D/G/tau' is actually just 'G/tau'. Each node contains only its own name
and that of its parent. This only happens for DISK trees.


I found the cause and came up with this patch. By reversing the order in
which nodes are added to the tree, the PATHs are constructed correctly.


But!, Fixing the issue also adds a '__SVN_ROOT_NODE/' string to the start of
each path, as in all the other "actual" trees. The directory
`__SVN_ROOT_NODE' doesn't actually exist, it is just a reserved name.

This, however, breaks update_tests.py 1 (and only this one, I ran the whole
bunch) with:

IOError: [Errno 2] No such file or directory:
'svn-test-work/working_copies/update_tests-1.backup/__SVN_ROOT_NODE/A/theta.r3'

It's obvious that this test relied on the erratic node paths. Since it only
uses the code in question on paths with a depth of two (`A/theta.r2' and
`A/theta.r3'), the test was simply lucky to work.

This patch also fixes this error (failure of update_tests.py 1) by removing
the `__SVN_ROOT_NODE' path element from node PATHs before using it.


(It might make sense to altogether remove the root_node_name from PATH
strings in all of the different "actual" trees. But that's another issue.)

~Neels


[[[
In the cmdline tests, fix PATH in "ACTUAL DISK" tree nodes, so that the
disk tree is printed correctly in the error output of a failing test.
"ACTUAL DISK" tree nodes only got a PATH string up to their respective
parents, breaking PATHs at a depth of more than 2; in side-effect, the
svntest.tree.root_node_name was missing from each PATH.
Also fix update_tests.py 1, which relied on the erratic PATH.

* subversion/tests/cmdline/svntest/tree.py (handle_dir): Reverse the
    order in which nodes are added to the tree, fixing PATH strings.

* subversion/tests/cmdline/update_tests.py (detect_extra_files):
    Strip the svntest.tree.root_node_name from nodes' PATH before
    using it as a real file system path.

Patch by: neels
]]]

-- 
Neels Hofmeyr -- elego Software Solutions GmbH
Gustav-Meyer-Allee 25 / Gebäude 12, 13355 Berlin, Germany
phone: +49 30 23458696  mobile: +49 177 2345869  fax: +49 30 23458695
http://www.elegosoft.com | Geschäftsführer: Olaf Wagner | Sitz: Berlin
Handelsreg: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194


Re: [PATCH] tests: cmdline: actual disk tree has wrong paths

Posted by Julian Foad <ju...@btopenworld.com>.
> Neels Hofmeyr wrote:
> > in the cmdline tests, after dumping "actual disk" trees to screen, it came
> > to my attention that all nodes below a depth of two have a wrong node.path.

Neels,

Thanks for the fix! Committed revision 32723.


> > (It might make sense to altogether remove the root_node_name from PATH
> > strings in all of the different "actual" trees. But that's another issue.)

Yes, that sounds like it might be a good idea, but we'd have to find out
why that tag was added in the first place. There might be a good reason
for keeping it.

> > [[[
> > In the cmdline tests, fix PATH in "ACTUAL DISK" tree nodes, so that the
> > disk tree is printed correctly in the error output of a failing test.
> > "ACTUAL DISK" tree nodes only got a PATH string up to their respective
> > parents, breaking PATHs at a depth of more than 2; in side-effect, the
> > svntest.tree.root_node_name was missing from each PATH.
> > Also fix update_tests.py 1, which relied on the erratic PATH.
> > 
> > * subversion/tests/cmdline/svntest/tree.py (handle_dir): Reverse the
> >     order in which nodes are added to the tree, fixing PATH strings.
> > 
> > * subversion/tests/cmdline/update_tests.py (detect_extra_files):
> >     Strip the svntest.tree.root_node_name from nodes' PATH before
> >     using it as a real file system path.
> > 
> > Patch by: neels
> > ]]]

I tweaked your log message a bit, but nothing major.

Thanks again.
- Julian



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: [PATCH] tests: cmdline: actual disk tree has wrong paths

Posted by Neels Hofmeyr <ne...@elego.de>.

Neels Hofmeyr wrote:
> Hi,
> 
> in the cmdline tests, after dumping "actual disk" trees to screen, it came
> to my attention that all nodes below a depth of two have a wrong node.path.
> 
> This is of course wrong, but has no bad effects in the current cmdline
> tests. But since the tests now print out these trees in the error output, it
> becomes confusing.
> 
> It is particularly annoying when pasting the printout to a py script, since
> it requires a degree of figuring out and editing.
> 
> 
> In the following example, I simulated a failure of update_tests.py 9 on
> today's trunk, by adding a fantasy node to the expected disk tree. It prints
> out the following actual disk tree:
> 
> [[[
> ACTUAL DISK TREE:
> svntest.wc.State('', {
>   'iota'              : Item(contents="This is the file 'iota'.\n"),
>   'A'                 : Item(),
>   'A/mu'              : Item(contents="This is the file 'mu'.\n"),
>   'A/C'               : Item(),
>   'A/B'               : Item(),
>   'B/lambda'          : Item(contents="This is the file 'lambda'.\n"),
>   'B/F'               : Item(),
>   'B/E'               : Item(),
>   'E/beta'            : Item(contents="This is the file 'beta'.\n"),
>   'E/alpha'           : Item(contents="This is the file 'alpha'.\n"),
>   'A/D'               : Item(),
>   'D/gamma'           : Item(contents="This is the file 'gamma'.\n"),
>   'D/G'               : Item(),
>   'G/tau'             : Item(contents="This is the file 'tau'.\n"),
>   'G/pi'              : Item(contents="This is the file 'pi'.\n"),
>   'G/rho'             : Item(contents="This is the file 'rho'.\n"),
>   'D/H'               : Item(),
>   'H/chi'             : Item(contents="This is the file 'chi'.\n"),
>   'H/psi'             : Item(contents="This is the file 'psi'.\n"),
>   'H/omega'           : Item(contents="This is the file 'omega'.\n"),
> })
> ]]]
> 
> This tree was read from disk and is actually well structured (node G
> actually sits below node D, which sits below node A, etc.).

To clarify, this tree was created as a mirror of an actual filesystem tree,
and the actual tree node instances in memory are well structured. Just their
PATH strings are wrong, thus the printout represents neither tree nor disk.

> 
> Each node has a PATH element, which holds its "full" path within the
> tree structure as a string. The nodes are printed out using this PATH.
> 
> Now, note that each PATH only has two node names. What should have been
> 'A/D/G/tau' is actually just 'G/tau'. Each node contains only its own name
> and that of its parent. This only happens for DISK trees.

s/Each node contains only/Each node's PATH contains only/

> 
> 
> I found the cause and came up with this patch. By reversing the order in
> which nodes are added to the tree, the PATHs are constructed correctly.
> 
> 
> But!, Fixing the issue also adds a '__SVN_ROOT_NODE/' string to the start of
> each path, as in all the other "actual" trees. The directory

The other tree kinds being "output", "status" and "skip", this one being a
"disk" tree. Of all four kinds, there are both "actual" and "expected"
representations. Just so you know what I'm talking about.

> `__SVN_ROOT_NODE' doesn't actually exist, it is just a reserved name.
> 
> This, however, breaks update_tests.py 1 (and only this one, I ran the whole
> bunch) with:
> 
> IOError: [Errno 2] No such file or directory:
> 'svn-test-work/working_copies/update_tests-1.backup/__SVN_ROOT_NODE/A/theta.r3'
> 
> It's obvious that this test relied on the erratic node paths. Since it only
> uses the code in question on paths with a depth of two (`A/theta.r2' and
> `A/theta.r3'), the test was simply lucky to work.
> 
> This patch also fixes this error (failure of update_tests.py 1) by removing
> the `__SVN_ROOT_NODE' path element from node PATHs before using it.

s/it/them/

> 
> 
> (It might make sense to altogether remove the root_node_name from PATH
> strings in all of the different "actual" trees. But that's another issue.)
> 
> ~Neels
> 
> 
> [[[
> In the cmdline tests, fix PATH in "ACTUAL DISK" tree nodes, so that the
> disk tree is printed correctly in the error output of a failing test.
> "ACTUAL DISK" tree nodes only got a PATH string up to their respective
> parents, breaking PATHs at a depth of more than 2; in side-effect, the
> svntest.tree.root_node_name was missing from each PATH.
> Also fix update_tests.py 1, which relied on the erratic PATH.
> 
> * subversion/tests/cmdline/svntest/tree.py (handle_dir): Reverse the
>     order in which nodes are added to the tree, fixing PATH strings.
> 
> * subversion/tests/cmdline/update_tests.py (detect_extra_files):
>     Strip the svntest.tree.root_node_name from nodes' PATH before
>     using it as a real file system path.
> 
> Patch by: neels
> ]]]
> 
> 

-- 
Neels Hofmeyr -- elego Software Solutions GmbH
Gustav-Meyer-Allee 25 / Gebäude 12, 13355 Berlin, Germany
phone: +49 30 23458696  mobile: +49 177 2345869  fax: +49 30 23458695
http://www.elegosoft.com | Geschäftsführer: Olaf Wagner | Sitz: Berlin
Handelsreg: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194