Patchwork [STABLE] tests: run "cwd was removed" test only if cwd can actually be removed

login
register
mail settings
Submitter Yuya Nishihara
Date Oct. 26, 2016, 2:11 p.m.
Message ID <d389b88b942adb330819.1477491086@mimosa>
Download mbox | patch
Permalink /patch/17196/
State Superseded
Headers show

Comments

Yuya Nishihara - Oct. 26, 2016, 2:11 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1477489806 -32400
#      Wed Oct 26 22:50:06 2016 +0900
# Branch stable
# Node ID d389b88b942adb330819437ef46d1b9acb4392d7
# Parent  b9f7b0c10027764cee77f9c6d61877fcffea837f
tests: run "cwd was removed" test only if cwd can actually be removed

On some platforms, cwd can't be removed. In which case, util.unlinkpath()
continues with no error since the failure isn't critical. So it doesn't
make sense to run the test added by 90a6c18a7c1d on those platforms.
Danek Duvall - Oct. 26, 2016, 2:39 p.m.
Yuya Nishihara wrote:

> # HG changeset patch
> # User Yuya Nishihara <yuya@tcha.org>
> # Date 1477489806 -32400
> #      Wed Oct 26 22:50:06 2016 +0900
> # Branch stable
> # Node ID d389b88b942adb330819437ef46d1b9acb4392d7
> # Parent  b9f7b0c10027764cee77f9c6d61877fcffea837f
> tests: run "cwd was removed" test only if cwd can actually be removed
> 
> On some platforms, cwd can't be removed. In which case, util.unlinkpath()
> continues with no error since the failure isn't critical.

The problem here is a bit more specific: while Linux (for example) prevents
you from removing cwd when referring to it as ".", Solaris prevents you
from removing it under all names.  So because that failure isn't critical,
the cwd ends up remaining behind on Solaris because it's done via the full
path.  It might make sense to be more specific in the name, too, though I'm
not sure what to suggest.

There's also a second test that has some related output:

    --- a/tests/test-rebase-scenario-global.t
    +++ b/tests/test-rebase-scenario-global.t
    @@ -758,8 +758,6 @@ Test that rebase is not confused by $CWD
       $ hg commit -m 'second source with subdir'
       $ hg rebase -b . -d 1 --traceback
       rebasing 2:779a07b1b7a0 "first source commit"
    -  current directory was removed
    -  (consider changing to repo root: $TESTTMP/cwd-vanish)
       rebasing 3:a7d6f3a00bf3 "second source with subdir" (tip)
       saved backup bundle to $TESTTMP/cwd-vanish/.hg/strip-backup/779a07b1b7a0-853e0073-backup.hg (glob)

is what I had to remove temporarily.

Thanks,
Danek
Yuya Nishihara - Oct. 27, 2016, 12:15 p.m.
On Wed, 26 Oct 2016 07:39:14 -0700, Danek Duvall wrote:
> Yuya Nishihara wrote:
> 
> > # HG changeset patch
> > # User Yuya Nishihara <yuya@tcha.org>
> > # Date 1477489806 -32400
> > #      Wed Oct 26 22:50:06 2016 +0900
> > # Branch stable
> > # Node ID d389b88b942adb330819437ef46d1b9acb4392d7
> > # Parent  b9f7b0c10027764cee77f9c6d61877fcffea837f
> > tests: run "cwd was removed" test only if cwd can actually be removed
> > 
> > On some platforms, cwd can't be removed. In which case, util.unlinkpath()
> > continues with no error since the failure isn't critical.
> 
> The problem here is a bit more specific: while Linux (for example) prevents
> you from removing cwd when referring to it as ".", Solaris prevents you
> from removing it under all names.  So because that failure isn't critical,
> the cwd ends up remaining behind on Solaris because it's done via the full
> path.  It might make sense to be more specific in the name, too, though I'm
> not sure what to suggest.

Yes, 'rmdir .' is prevented even on Linux. Since I have no better name, I
just added some comments.

> There's also a second test that has some related output:
> 
>     --- a/tests/test-rebase-scenario-global.t
>     +++ b/tests/test-rebase-scenario-global.t
>     @@ -758,8 +758,6 @@ Test that rebase is not confused by $CWD
>        $ hg commit -m 'second source with subdir'
>        $ hg rebase -b . -d 1 --traceback
>        rebasing 2:779a07b1b7a0 "first source commit"
>     -  current directory was removed
>     -  (consider changing to repo root: $TESTTMP/cwd-vanish)
>        rebasing 3:a7d6f3a00bf3 "second source with subdir" (tip)
>        saved backup bundle to $TESTTMP/cwd-vanish/.hg/strip-backup/779a07b1b7a0-853e0073-backup.hg (glob)

Oops, fixed in V2.

Patch

diff --git a/tests/hghave.py b/tests/hghave.py
--- a/tests/hghave.py
+++ b/tests/hghave.py
@@ -346,6 +346,19 @@  def has_hardlink():
     finally:
         os.unlink(fn)
 
+@check("rmcwd", "can remove current working directory")
+def has_rmcwd():
+    ocwd = os.getcwd()
+    temp = tempfile.mkdtemp(dir='.', prefix=tempprefix)
+    try:
+        os.chdir(temp)
+        os.rmdir(os.getcwd())
+        return True
+    except OSError:
+        return False
+    finally:
+        os.chdir(ocwd)
+
 @check("tla", "GNU Arch tla client")
 def has_tla():
     return matchoutput('tla --version 2>&1', br'The GNU Arch Revision')
diff --git a/tests/test-update-names.t b/tests/test-update-names.t
--- a/tests/test-update-names.t
+++ b/tests/test-update-names.t
@@ -73,6 +73,8 @@  Test update when two commits have symlin
 
 #endif
 
+#if rmcwd
+
 Test that warning is printed if cwd is deleted during update
   $ hg init r4 && cd r4
   $ mkdir dir
@@ -84,3 +86,5 @@  Test that warning is printed if cwd is d
   $ hg up -q null
   current directory was removed
   (consider changing to repo root: $TESTTMP/r1/r4)
+
+#endif