Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Tue, 19 Apr 2005 10:27:08 -0400 (EDT) From: Igor Pechtchanski Reply-To: cygwin AT cygwin DOT com To: Jason Tishler cc: cygwin AT cygwin DOT com, ward AT mit DOT edu Subject: Re: Symlinks don't work in python??? In-Reply-To: <20050419124816.GB2772@tishler.net> Message-ID: References: <20050411142112 DOT GA3796 AT tishler DOT net> <20050416021255 DOT GA2624 AT tishler DOT net> <20050419124816 DOT GB2772 AT tishler DOT net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Tue, 19 Apr 2005, Jason Tishler wrote: > Steve, > > On Fri, Apr 15, 2005 at 10:12:56PM -0400, Jason Tishler wrote: > > On Fri, Apr 15, 2005 at 03:54:37PM -0400, Steve Ward wrote: > > > Can you try my failing experiment (symlink bar.py to file foo.py in > > > same directory)? > > > > I was able reproduce your problem on my way out of work today. > > > > > It seems using a different name for the symlink may cause the > > > trouble... I have no idea why. > > > > Can you strace the issue and report back to the list? If not, then I > > will try when I'm back at work on Monday. > > AFAICT, symlinking bar.py to foo.py never worked or at least since > case-insensitive file system support was added to Python in 2/2001: > > http://www.amk.ca/python/2.1/index.html#SECTION0001000000000000000000 Why not use the built-in Cygwin case checking feature with CYGWIN=check_case:strict? > The problem is Cygwin specific code is invoked during imports to make > sure one imports a module using the same case as the file stored in the > file system. For example, "foo" will match "foo.py" but not "FoO.py", > etc. When you import bar (i.e., bar.py) which is symlinked to foo.py > the case checking code fails (because "bar" != "foo") and the module is > skipped. Ouch. It should be checking against the resolved Win32 filename instead. See below. > You can workaround the problem by defining PYTHONCASEOK: > > $ PYTHONCASEOK= python -c 'import bar' > $ > > I will work with the Python developers to try to come up with a better > long term solution. The way Cygwin does it internally is get a directory entry using a given Win32 filename, and then compare the case of the filename with that of the directory entry. The first part ensures that the filename can only refer to the same file, and this happens after symlink resolution, so if "bar.py" is a symlink to "FoO.py", and the file on disk is "fOo.py", the latter check will fail. HTH, Igor -- http://cs.nyu.edu/~pechtcha/ |\ _,,,---,,_ pechtcha AT cs DOT nyu DOT edu ZZZzz /,`.-'`' -. ;-;;,_ igor AT watson DOT ibm DOT com |,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski, Ph.D. '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow! "The Sun will pass between the Earth and the Moon tonight for a total Lunar eclipse..." -- WCBS Radio Newsbrief, Oct 27 2004, 12:01 pm EDT -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/