X-Spam-Check-By: sourceware.org Message-ID: <45DCC636.1060208@portugalmail.pt> Date: Wed, 21 Feb 2007 22:22:46 +0000 From: Pedro Alves User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.0.9) Gecko/20061207 Thunderbird/1.5.0.9 Mnenhy/0.7.4.0 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: patch -e from stdin broken? References: <1172072129 DOT 45dc66c1415be AT webmail4 DOT portugalmail DOT pt> <20070221154449 DOT GB15002 AT calimero DOT vinschen DOT de> <45DC9D30 DOT 8080506 AT portugalmail DOT pt> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Antivirus: avast! (VPS 000715-1, 21-02-2007), Outbound message X-Antivirus-Status: Clean X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: 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 Hi Igor, Igor Peshansky wrote: > On Wed, 21 Feb 2007, Pedro Alves wrote: > >> (Here is the original message I tried to send earlier, sorry for the mess.) >> >> Hi guys, >> >> While looking at why 'quilt annotate' is broken in Cygwin, I found >> something fishy on 'patch' in ed mode. Looks like reading the patch >> from stdin is broken. Reading the patch from a file with -i works >> ok. Here is how to reproduce: >> >> $ touch a.txt >> >> $ cat << EOF > b.txt >> >>>> a new line >>>> EOF >> $ diff -e a.txt b.txt > ab.diff >> >> $ cat ab.diff >> 0a >> a new line >> . >> >> $ patch -e a.txt < ab.diff >> >> $ /cygdrive/c/DOCUME~1/pt104167/LOCALS~1/Temp/poL0ERTu: No such file >> or directory > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > Looks like your $TMP is set to something Cygwin doesn't like... Try > setting it to, say, /tmp, and see if that makes patch -e happier... > Thanks for the hints. Sorry I didn't say earlier, but I had already tried that. Cygwin does understand that path, just checked (notice the /cygdrive/c/ prefix). Actually patch honors $TMPDIR first, so I had tried setting it to /tmp, and the same thing happens: export TMPDIR=/tmp patch -e a.txt < ab.diff /tmp/posrjz1q: No such file or directory (yes, /tmp does exist) ( Just found out another thing: export TMPDIR=/ patch -e a.txt < ab.diff #looks like it is hanging, but about 20 seconds later: patch: **** Can't create file //ppMxHRaO : No such host or network path The double slash should have been filtered before trying to open the file. Humm, easy to solve on patch side, but setting TMPDIR=/ breaks a lot of stuff, even gcc and make, so I guess it is one of those "don't do it" - FAQ thingies, that I missed somewhere. ) >> [snip] >> That 'No such file' error message comes from ed, or so it seems. >> It looks like something is going wrong with the pipe to ed >> (patch/pch.c:do_ed_script), but I can't see what. The filename passed >> to it is correct, but somehow, when the pipe is fflushed ed barks. >> If I put a _cexit before the pipe is flushed, ed doesn't complain. >> I also tested it on kubuntu 6.06, and on Solaris 10 with gnu patch, >> gnu diff and Sun ed, and it worked correctly, so it does look >> like a Cygwin specific problem. > > You could also try playing with the "binmode" setting in the Cygwin > environment variable, which controls line endings in pipes. > I don't have any textmode mounts. >> (end original message) >> >> As Corinna found out, not specifying the file to patch, but doing >> it interactively works ok. That should make it easier to debug. >> >> $ patch -e < ab.diff >> can't find file to patch at input line 1 >> Perhaps you used the wrong -p or --strip option? >> File to patch: a.txt >> $ cat a.txt >> a new line >> $ >> >> $ patch -e a.txt < ab.diff >> /cygdrive/c/DOCUME~1/ADMINI~1/DEFINI~1/Temp/poh0o0Rq: No such file or >> directory > > Hmm, you also forgot to mention the directory where a.txt resides... > Try first doing this on a binary mount in some directory under Cygwin root > (e.g., /tmp). If that works, look into directories and environment > variable settings. Doesn't work anywhere: ~, /tmp, /cygdrive/d, etc. Did it work for you, when you followed the recipe I sent? If you didn't try, could you, please? >mount d:\cygwin\bin on /usr/bin type system (binmode) d:\cygwin\lib on /usr/lib type system (binmode) d:\cygwin on / type system (binmode) d:\MinGW on /mingw type system (binmode) c: on /cygdrive/c type system (binmode,noumount) d: on /cygdrive/d type system (binmode,noumount) e: on /cygdrive/e type system (binmode,noumount) f: on /cygdrive/f type system (binmode,noumount) l: on /cygdrive/l type system (binmode,noumount) m: on /cygdrive/m type system (binmode,noumount) x: on /cygdrive/x type system (binmode,noumount) >set | grep CYG CYGWIN=ntsec CYGWIN_ROOT='\cygwin' Cheers, Pedro Alves -- 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/