[systemd-commits] src/sysv-generator test/sysv-generator-test.py

Lennart Poettering lennart at kemper.freedesktop.org
Wed Feb 11 04:02:14 PST 2015


 src/sysv-generator/sysv-generator.c |    8 +++++++-
 test/sysv-generator-test.py         |   12 ++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

New commits:
commit f4f01ec146d91cb6943828851d98eee6a1ad4dd9
Author: Martin Pitt <martin.pitt at ubuntu.com>
Date:   Wed Jul 2 22:00:00 2014 +0200

    sysv-generator: Skip init scripts for existing native services
    
    This avoids taking the SysV init script enablement state into account if we
    have native units. Otherwise systemctl disable on native unit would not
    be respected in the presence of an enabled SysV script.
    
    Also, there's no need to do all the parsing and creation of service files if we
    already have a native systemd unit for the processed SysV init script.

diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index 673f04d..6e39b44 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -768,6 +768,11 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
                         if (!fpath)
                                 return log_oom();
 
+                        if (unit_file_get_state(UNIT_FILE_SYSTEM, NULL, name) >= 0) {
+                                log_debug("Native unit for %s already exists, skipping", name);
+                                continue;
+                        }
+
                         service = new0(SysvStub, 1);
                         if (!service)
                                 return log_oom();
@@ -852,7 +857,8 @@ static int set_dependencies_from_rcnd(LookupPaths lp, Hashmap *all_services) {
 
                                 service = hashmap_get(all_services, name);
                                 if (!service){
-                                        log_warning("Could not find init script for %s", name);
+                                        log_debug("Ignoring %s symlink in %s, not generating %s.",
+                                                  de->d_name, rcnd_table[i].path, name);
                                         continue;
                                 }
 
diff --git a/test/sysv-generator-test.py b/test/sysv-generator-test.py
index 5098519..09f5c01 100644
--- a/test/sysv-generator-test.py
+++ b/test/sysv-generator-test.py
@@ -367,6 +367,18 @@ class SysvGeneratorTest(unittest.TestCase):
         self.assert_enabled('foo.bak.service', [])
         self.assert_enabled('foo.old.service', [])
 
+    def test_existing_native_unit(self):
+        '''existing native unit'''
+
+        with open(os.path.join(self.unit_dir, 'foo.service'), 'w') as f:
+            f.write('[Unit]\n')
+
+        self.add_sysv('foo.sh', {'Provides': 'foo bar'}, enable=True)
+        err, results = self.run_generator()
+        self.assertEqual(list(results), [])
+        # no enablement or alias links, as native unit is disabled
+        self.assertEqual(os.listdir(self.out_dir), [])
+
 
 if __name__ == '__main__':
     unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, verbosity=2))



More information about the systemd-commits mailing list