[PATCH] cmdserver: restore old working dir after dispatch when we have --cwd

Idan Kamara idankk86 at gmail.com
Mon Jul 11 09:50:42 CDT 2011


# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1310395785 -10800
# Node ID 7fcff834a2fe3c0326454302d4eacca1a89a3bfe
# Parent  2f3e7fc16f69a36832f67dc588dbeb0ff40015eb
cmdserver: restore old working dir after dispatch when we have --cwd

diff -r 2f3e7fc16f69 -r 7fcff834a2fe mercurial/commandserver.py
--- a/mercurial/commandserver.py	Mon Jul 11 17:46:55 2011 +0300
+++ b/mercurial/commandserver.py	Mon Jul 11 17:49:45 2011 +0300
@@ -7,7 +7,7 @@
 
 from i18n import _
 import struct
-import sys
+import sys, os
 import dispatch, encoding, util
 
 logfile = None
@@ -131,6 +131,7 @@
     based stream to stdout.
     """
     def __init__(self, ui, repo, mode):
+        self.cwd = os.getcwd()
         self.ui = ui
 
         logpath = ui.config("cmdserver", "log", None)
@@ -183,11 +184,15 @@
         self.repo.baseui = copiedui
         self.repo.ui = self.repo.dirstate._ui = self.repoui.copy()
 
-        req = dispatch.request(args, copiedui, self.repo, self.cin,
+        req = dispatch.request(args[:], copiedui, self.repo, self.cin,
                                self.cout, self.cerr)
 
         ret = dispatch.dispatch(req) or 0 # might return None
 
+        # restore old cwd
+        if '--cwd' in args:
+            os.chdir(self.cwd)
+
         self.cresult.write(struct.pack('>i', int(ret)))
 
     def getencoding(self):
diff -r 2f3e7fc16f69 -r 7fcff834a2fe tests/test-commandserver.py
--- a/tests/test-commandserver.py	Mon Jul 11 17:46:55 2011 +0300
+++ b/tests/test-commandserver.py	Mon Jul 11 17:49:45 2011 +0300
@@ -120,6 +120,15 @@
     runcommand(server, ['import', '-'], input=cStringIO.StringIO(patch))
     runcommand(server, ['log'])
 
+def cwd(server):
+    """ check that --cwd doesn't persist between requests """
+    readchannel(server)
+    os.mkdir('foo')
+    open('foo/bar', 'w').write('a')
+    runcommand(server, ['--cwd', 'foo', 'st', 'bar'])
+    runcommand(server, ['st', 'foo/bar'])
+    os.remove('foo/bar')
+
 if __name__ == '__main__':
     os.system('hg init')
 
@@ -128,3 +137,4 @@
     check(checkruncommand)
     check(inputeof)
     check(serverinput)
+    check(cwd)
diff -r 2f3e7fc16f69 -r 7fcff834a2fe tests/test-commandserver.py.out
--- a/tests/test-commandserver.py.out	Mon Jul 11 17:46:55 2011 +0300
+++ b/tests/test-commandserver.py.out	Mon Jul 11 17:49:45 2011 +0300
@@ -36,3 +36,5 @@
 date:        Thu Jan 01 00:00:00 1970 +0000
 summary:     1
 
+? bar
+? foo/bar


More information about the Mercurial-devel mailing list