diff --git a/mercurial/commandserver.py b/mercurial/commandserver.py --- a/mercurial/commandserver.py +++ b/mercurial/commandserver.py @@ -7,7 +7,7 @@ from i18n import _ import struct -import sys +import sys, os import dispatch, encoding, util logfile = None @@ -131,6 +131,7 @@ class server(object): 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 @@ class server(object): 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 --git a/tests/test-commandserver.py b/tests/test-commandserver.py --- a/tests/test-commandserver.py +++ b/tests/test-commandserver.py @@ -120,6 +120,15 @@ diff -r 000000000000 -r c103a3dec114 a 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 @@ if __name__ == '__main__': check(checkruncommand) check(inputeof) check(serverinput) + check(cwd) diff --git a/tests/test-commandserver.py.out b/tests/test-commandserver.py.out --- a/tests/test-commandserver.py.out +++ b/tests/test-commandserver.py.out @@ -36,3 +36,5 @@ user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: 1 +? bar +? foo/bar