From 19b40540b0254c47d7a70eef12c2200bb96a4b9d Mon Sep 17 00:00:00 2001
From: James Graham <j.graham@soton.ac.uk>
Date: Sat, 9 Oct 2021 16:21:06 +0100
Subject: [PATCH] fix: backup forcefield directories instead of overwrite

---
 pycgtool/forcefield.py   |  3 ++-
 tests/test_forcefield.py | 22 ++++++++++++++--------
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/pycgtool/forcefield.py b/pycgtool/forcefield.py
index 89f2090..be34b57 100644
--- a/pycgtool/forcefield.py
+++ b/pycgtool/forcefield.py
@@ -8,7 +8,7 @@ import shutil
 import typing
 
 from .parsers import CFG
-from .util import any_starts_with, file_write_lines
+from .util import any_starts_with, backup_file, file_write_lines
 
 PathLike = typing.Union[pathlib.Path, str]
 
@@ -32,6 +32,7 @@ class ForceField:
         :param str name: Forcefield name to open/create
         """
         self.directory = pathlib.Path(dir_path).joinpath(f'ff{name}.ff')
+        backup_file(self.directory)
         self.directory.mkdir(parents=True, exist_ok=True)
 
         with open(self.directory.joinpath('forcefield.itp'), 'w') as itp:
diff --git a/tests/test_forcefield.py b/tests/test_forcefield.py
index 05aee8a..57d5ed8 100644
--- a/tests/test_forcefield.py
+++ b/tests/test_forcefield.py
@@ -1,6 +1,7 @@
-import unittest
-import os
 import collections
+import pathlib
+import tempfile
+import unittest
 
 from pycgtool.forcefield import ForceField
 
@@ -57,13 +58,18 @@ class ForceFieldTest(unittest.TestCase):
         self.bondset = DummyBondSet(self.bonds, "Dummy")
 
     def test_create(self):
-        name = "test"
-        dirname = "fftest.ff"
+        with tempfile.TemporaryDirectory() as t:
+            tmp_dir = pathlib.Path(t)
+
+            name = "test"
+            ff_dir = tmp_dir.joinpath('fftest.ff')
+
+            ForceField(name, dir_path=tmp_dir)
+            self.assertTrue(ff_dir.exists())
+            self.assertTrue(ff_dir.is_dir())
 
-        ForceField(name)
-        self.assertTrue(os.path.exists(dirname))
-        self.assertTrue(os.path.isdir(dirname))
-        ForceField(name)
+            # Makes a backup of the existing ff and replaces it
+            ForceField(name, dir_path=tmp_dir)
 
     def test_bond_section(self):
         expected = [
-- 
GitLab