Fix temporary project not cleanup with save as

This commit is contained in:
Julien Duponchelle 2015-05-04 14:04:57 +02:00
parent 0dea63c9ea
commit d2d91ebdea
3 changed files with 19 additions and 6 deletions

View File

@ -81,13 +81,14 @@ class ProjectHandler:
pm = ProjectManager.instance() pm = ProjectManager.instance()
project = pm.get_project(request.match_info["project_id"]) project = pm.get_project(request.match_info["project_id"])
project.temporary = request.json.get("temporary", project.temporary)
project.name = request.json.get("name", project.name) project.name = request.json.get("name", project.name)
project_path = request.json.get("path", project.path) project_path = request.json.get("path", project.path)
if project_path != project.path: if project_path != project.path:
project.path = project_path project.path = project_path
for module in MODULES: for module in MODULES:
yield from module.instance().project_moved(project) yield from module.instance().project_moved(project)
# Very important we need to remove temporary flag after moving the project
project.temporary = request.json.get("temporary", project.temporary)
response.json(project) response.json(project)
@classmethod @classmethod

View File

@ -139,9 +139,22 @@ class Project:
if path != self._path and self.is_local() is False: if path != self._path and self.is_local() is False:
raise aiohttp.web.HTTPForbidden(text="You are not allowed to modify the project directory location") raise aiohttp.web.HTTPForbidden(text="You are not allowed to modify the project directory location")
old_path = None
if hasattr(self, "_path"):
old_path = self._path
self._path = path self._path = path
self._update_temporary_file() self._update_temporary_file()
# The order of operation is important because we want to avoid losing
# data
if old_path:
try:
shutil.rmtree(old_path)
except OSError as e:
raise aiohttp.web.HTTPConflict("Can't remove temporary directory {}: {}".format(old_path ,e))
@property @property
def name(self): def name(self):

View File

@ -69,15 +69,14 @@ def test_changing_path_temporary_flag(tmpdir):
with patch("gns3server.modules.project.Project.is_local", return_value=True): with patch("gns3server.modules.project.Project.is_local", return_value=True):
p = Project(temporary=True) p = Project(temporary=True)
assert os.path.exists(p.path) assert os.path.exists(p.path)
original_path = p.path
assert os.path.exists(os.path.join(p.path, ".gns3_temporary")) assert os.path.exists(os.path.join(p.path, ".gns3_temporary"))
p.temporary = False
assert not os.path.exists(os.path.join(p.path, ".gns3_temporary"))
with open(str(tmpdir / ".gns3_temporary"), "w+") as f:
f.write("1")
p.path = str(tmpdir) p.path = str(tmpdir)
p.temporary = False
assert not os.path.exists(os.path.join(p.path, ".gns3_temporary"))
assert not os.path.exists(os.path.join(str(tmpdir), ".gns3_temporary")) assert not os.path.exists(os.path.join(str(tmpdir), ".gns3_temporary"))
assert not os.path.exists(original_path)
def test_temporary_path(): def test_temporary_path():