On Sun, Jan 18, 2009 at 3:23 PM, Craig Berry <[email protected]> wrote:
> After installing TortoiseHg awhile back, I noticed that attempting to open 
> certain network folders resulted in a hang in explorer and I would have to 
> kill it with Task Manager.  It appears the problem is in find_root, or 
> actually in find_root's call to os.path.isdir.  Lifting find_root directly 
> from the TortoiseHg sources, adding some print statements, and making it run 
> independently gives me the following little test program:

Thanks for looking into this.

> ----- begin find_root.py ----
> import os.path
> import sys
>
> def find_root(path):
>    p = os.path.isdir(path) and path or os.path.dirname(path)
>    while not os.path.isdir(os.path.join(p, ".hg")):
>        oldp = p
>        print "Getting dirname of '" + p + "'"
>        p = os.path.dirname(p)
>        print "Got '" + p + "'"
>        if p == oldp:
>            return None
>    print "Returning with p='" + p + "'"
>    return p
>
> print "Finding root of '" + sys.argv[1] + "'"
> find_root(sys.argv[1])
>
> ----- end find_root.py -----
>
> In the following example, I have full access to some of the shares on 
> \\mynode, but do not have even read access to the root (that's key, as other 
> systems where I do have access to the root path do not illustrate the 
> problem).  So I run the test program like so:
>
> C:\work>python find_root.py \\mynode\foo\bar
> Finding root of '\\mynode\foo\bar'
> Getting dirname of '\\mynode\foo\bar'
> Got '\\mynode\foo'
> Getting dirname of '\\mynode\foo'
> Got '\\mynode'
>
> at which point it hangs.  The hang can be further narrowed to the call to 
> os.path.isdir with the following test program:
>
> ---- begin check_isdir.py -----
> import os.path
> import sys
>
> hgpath = os.path.join(sys.argv[1], ".hg")
> print "Checking whether '" + hgpath + "' is a directory."
> if os.path.isdir(hgpath):
>    print "Yes, it is"
> ----- end check_isdir.py -----
>
>
> C:\work>python check_isdir.py \\mynode
> Checking whether '\\mynode\.hg' is a directory.

Does  '\\mynode\.hg' exist? Also, does it hang if you call
os.path.isdir("\\mynode")?

> and here we hang again.  So, to summarize, calling 
> os.path.isdir("\\mynode\.hg") when I do not have read access to the root of 
> \\mynode causes a hang.  This may well be a Python bug as it's actually 
> getting hung in os.stat, which is called by os.path.isdir.
>

Hopefully not, else it will be hard to fix.

> I reproduced this with Python 2.6.1 on Windows XP.

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Tortoisehg-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop

Reply via email to