Return to original directory after libbe.bugdir.SimpleBugDirTestCase().
authorW. Trevor King <wking@drexel.edu>
Fri, 31 Jul 2009 09:24:05 +0000 (05:24 -0400)
committerW. Trevor King <wking@drexel.edu>
Fri, 31 Jul 2009 09:24:05 +0000 (05:24 -0400)
This was causing strange "RCS not found" errors in the bzr and hg
unittests.  For example, the bzr tests all passed:
  wking@thor:be.wtk-rr$ python test.py bzr
  ...
  Ran 12 tests in 24.143s

  OK
Except when run after the bugdir tests:
  wking@thor:be.wtk-rr$ python test.py bugdir bzr
  ...
  Ran 19 tests in 1.862s

  FAILED (errors=12)
Where the failures were all
  AssertionError: bzr RCS not found

Fixed by returning to intial directory after SimpleBugDirTestCase
execution.  Problem is due to Python issues with unlinked directories
though, so bzr/hg will _still_ not work from unlinked directories.
This is for Python 2.5.4 on Ubuntu 8.04.3, but probably effects other
pythons too.

Details:

Isolated problem to unlinked directories:
  mkdir /tmp/a
  cd /tmp/a
  rmdir /tmp/a
  python /home/wking/src/fun/be/be.wtk-rr/test.py bzr
which fails with the same "RCS not found" errors because bzr fails:
  wking@thor:/$ mkdir /tmp/a; cd /tmp/a; rmdir /tmp/a; bzr --help; cd /;
  rmdir: removing directory, /tmp/a
  'import site' failed; use -v for traceback
  bzr: ERROR: Couldn't import bzrlib and dependencies.
  Please check bzrlib is on your PYTHONPATH.

  Traceback (most recent call last):
    File "/usr/bin/bzr", line 64, in <module>
      import bzrlib
  ImportError: No module named bzrlib
which fails becase 'import site' fails:
  wking@thor:/$ mkdir /tmp/a; cd /tmp/a; rmdir /tmp/a; python -c 'import site'; cd /;
  rmdir: removing directory, /tmp/a
  'import site' failed; use -v for traceback
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/home/wking/lib/python/site.py", line 73, in <module>
      __boot()
    File "/home/wking/lib/python/site.py", line 33, in __boot
      imp.load_module('site',stream,path,descr)
    File "/usr/lib/python2.5/site.py", line 408, in <module>
      main()
    File "/usr/lib/python2.5/site.py", line 392, in main
      paths_in_sys = removeduppaths()
    File "/usr/lib/python2.5/site.py", line 96, in removeduppaths
      dir, dircase = makepath(dir)
    File "/usr/lib/python2.5/site.py", line 72, in makepath
      dir = os.path.abspath(os.path.join(*paths))
    File "/usr/lib/python2.5/posixpath.py", line 403, in abspath
      path = join(os.getcwd(), path)
  OSError: [Errno 2] No such file or directory
which fails because our cwd doesn't exist.  That makes sense ;).
Still I think Python should be able to handle it, so I reported it
  http://bugs.python.org/issue6612

libbe/bugdir.py

index 8ec5a312529d2b38da97e46e6445c714d81594d5..0bcf27e6594dd035d023fcff83f93974e7f89c5c 100644 (file)
@@ -760,12 +760,14 @@ class SimpleBugDirTestCase (unittest.TestCase):
     def setUp(self):
         # create a pre-existing bugdir in a temporary directory
         self.dir = utility.Dir()
+        self.original_working_dir = os.getcwd()
         os.chdir(self.dir.path)
         self.bugdir = BugDir(self.dir.path, sink_to_existing_root=False,
                              allow_rcs_init=True)
         self.bugdir.new_bug("preexisting", summary="Hopefully not imported")
         self.bugdir.save()
     def tearDown(self):
+        os.chdir(self.original_working_dir)
         self.dir.cleanup()
     def testOnDiskCleanLoad(self):
         """simple_bug_dir(sync_with_disk==True) should not import preexisting bugs."""