[Groonga-commit] droonga/droonga-http-server at 0b35093 [master] Make asynchronous operations thennable.

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri Sep 19 20:34:43 JST 2014


YUKI Hiroshi	2014-09-19 20:34:43 +0900 (Fri, 19 Sep 2014)

  New Revision: 0b3509383356e8d79f26839f2124ca5bd0f09469
  https://github.com/droonga/droonga-http-server/commit/0b3509383356e8d79f26839f2124ca5bd0f09469

  Message:
    Make asynchronous operations thennable.
    
    Q.Promise works like ES6 Promise.

  Modified files:
    bin/droonga-http-server-configure
    package.json

  Modified: bin/droonga-http-server-configure (+84 -61)
===================================================================
--- bin/droonga-http-server-configure    2014-09-19 20:20:20 +0900 (5824f08)
+++ bin/droonga-http-server-configure    2014-09-19 20:34:43 +0900 (0811d2c)
@@ -5,6 +5,7 @@ var exec     = require('child_process').exec,
     fs       = require('fs'),
     path     = require('path'),
     promptly = require('promptly'),
+    Q        = require('q'),
     touch    = require('touch'),
     uid      = require('uid-number'),
     yaml     = require('js-yaml');
@@ -22,34 +23,39 @@ var installedAsService = false;
 var running            = false;
 
 
-function checkServiceUserExistence(callback) {
+function checkServiceUserExistence() {
+ return Q.Promise(function(resolve, reject, notify) {
   exec('id ' + serviceUserName, function(error, stdin, stdout) {
     if (!error)
       serviceUserExists = true;
-    callback(serviceUserExists);
+    resolve(serviceUserExists);
   });
+ });
 }
 
-function checkInstalledAsService(callback) {
+function checkInstalledAsService() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (!serviceUserName)
-    return callback(installedAsService);
+    return resolve(installedAsService);
 
   exec('service droonga-http-server status', function(error, stdin, stdout) {
     if (error) {
       exec('SYSTEMCTL_SKIP_REDIRECT=yes service droonga-http-server status', function(error, stdin, stdout) {
         installedAsService = stdin.indexOf('running') > -1 ||
                              stdin.indexOf('droonga-http-server is stopped') > -1;
-        callback(installedAsService);
+        resolve(installedAsService);
       });
     }
     else {
       installedAsService = true;
-      callback(installedAsService);
+      resolve(installedAsService);
     }
   });
+ });
 }
 
-function ensureHaveWritePermission(callback) {
+function ensureHaveWritePermission() {
+ return Q.Promise(function(resolve, reject, notify) {
   testFile = baseDir + '/' + Date.now() + '.test';
   touch(testFile, {}, function(error) {
     if (error || !fs.existsSync(testFile)) {
@@ -57,19 +63,21 @@ function ensureHaveWritePermission(callback) {
                     '<' + baseDir + '>.')
       console.log('Try again with right permission.')
       process.exit(false)
-      return;
+      return reject(error);
     }
     fs.unlinkSync(testFile);
-    callback(null);
+    resolve();
   });
+ });
 }
 
-function checkRunningStatus(callback) {
+function checkRunningStatus() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (installedAsService) {
     exec('SYSTEMCTL_SKIP_REDIRECT=yes service droonga-http-server status',
          function(error, stdin, stdout) {
            running = !error && stdin.indexOf('running') > -1;
-           callback(running);
+           resolve(running);
          });
   }
   else {
@@ -78,14 +86,16 @@ function checkRunningStatus(callback) {
            '--pid-file="' + options.pidFile + '"',
          function(error, stdin, stdout) {
            running = !error;
-           callback(running);
+           resolve(running);
          });
   }
+ });
 }
 
-function ensureServiceStopped(callback) {
+function ensureServiceStopped() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (!running || options.quiet)
-    return stopService(callback);
+    return stopService().then(resolve);
 
   console.log('The droonga-http-server service is now running.');
   console.log('Before reconfiguration, the service is going to be stopped.');
@@ -93,17 +103,21 @@ function ensureServiceStopped(callback) {
                    { default: 'no',
                      retry:   false },
                    function(error, ok) {
-                     if (error || !ok)
-                       return process.exit(false);
-                     stopService(callback);
+                     if (error || !ok) {
+                       process.exit(false);
+                       return reject(error);
+                     }
+                     stopService().then(resolve);
                    });
+ });
 }
 
-function stopService(callback) {
+function stopService() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (installedAsService) {
     exec('service droonga-http-server stop',
          function(error, stdin, stdout) {
-           callback();
+           resolve();
          });
   }
   else {
@@ -111,25 +125,26 @@ function stopService(callback) {
            '--base-dir="' + baseDir + '" ' +
            '--pid-file="' + options.pidFile + '"',
          function(error, stdin, stdout) {
-           callback();
+           resolve();
          });
   }
+ });
 }
 
-function startService(callback) {
+function startService() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (installedAsService) {
     exec('service droonga-http-server start',
          function(error, stdin, stdout) {
-           if (callback)
-             callback();
+           resolve();
          });
   }
   else {
     console.log('The droonga-http-server service is still stopped.');
     console.log('You need to start the service again manually.');
-    if (callback)
-      callback();
+    resolve();
   }
+ });
 }
 
 function parseOptions() {
@@ -151,7 +166,8 @@ function configFileExists() {
   return fs.existsSync(configFilePath());
 }
 
-function confirmToReconfigure(callback) {
+function confirmToReconfigure() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (!options.quiet && !options.resetConfig) {
     promptly.confirm('Do you want the configuration file ' +
                         '"droonga-http-server.yaml" to be regenerated? (y/N): ',
@@ -159,12 +175,13 @@ function confirmToReconfigure(callback) {
                        retry:   false },
                      function(error, ok) {
                        options.resetConfig = !error && ok;
-                       callback();
+                       resolve();
                      });
   }
   else {
-    callback();
+    resolve();
   }
+ });
 }
 
 var configValues = {};
@@ -202,9 +219,10 @@ function setBoolean(name, message, callback) {
 }
 
 
-function tryResetStringConfigs(callback) {
+function tryResetStringConfigs() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (!options.resetConfig)
-    return callback();
+    return resolve();
 
   var configKeys = {
     port:                  'port',
@@ -236,18 +254,20 @@ function tryResetStringConfigs(callback) {
   var key = keys.shift();
   setValue(key, configKeys[key], function next() {
     if (!keys.length) {
-      callback();
+      resolve();
     }
     else {
       key = keys.shift();
       setValue(key, configKeys[key], next);
     }
   });
+ });
 }
 
-function tryResetBooleanConfigs(callback) {
+function tryResetBooleanConfigs() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (!options.resetConfig)
-    return callback();
+    return resolve();
 
   var configKeys = {
     enableTrustProxy: 'enable "trust proxy" configuration'
@@ -266,18 +286,20 @@ function tryResetBooleanConfigs(callback) {
   var key = keys.shift();
   setBoolean(key, configKeys[key], function next() {
     if (!keys.length) {
-      callback();
+      resolve();
     }
     else {
       key = keys.shift();
       setBoolean(key, configKeys[key], next);
     }
   });
+ });
 }
 
-function writeNewConfigs(callback) {
+function writeNewConfigs() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (!options.resetConfig)
-    return callback();
+    return resolve();
 
   var configs = {};
   configs.port               = configValues.port;
@@ -304,12 +326,13 @@ function writeNewConfigs(callback) {
   if (serviceUserExists) {
     uid(serviceUserName, serviceGroupName, function(error, uid, gid) {
       fs.chownSync(configFilePath(), uid, gid);
-      callback();
+      resolve();
     });
   }
   else {
-    callback();
+    resolve();
   }
+ });
 }
 
 function safeWriteFileSync(path, data, options) {
@@ -319,36 +342,36 @@ function safeWriteFileSync(path, data, options) {
 }
 
 function finish() {
+ return Q.Promise(function(resolve, reject, notify) {
   if (running)
-    startService();
+    startService().resolve();
+  else
+    resolve();
+ });
 }
 
 
-checkServiceUserExistence(function() {
-checkInstalledAsService(function() {
+checkServiceUserExistence()
+ .then(checkInstalledAsService)
+ .then(function() {
   if (serviceUserExists)
     process.env.DROONGA_BASE_DIR = defaultConfigs.baseDir = serviceBaseDir;
 
   baseDir = defaultConfigs.baseDir;
+ })
+ .then(ensureHaveWritePermission)
+ .then(function() {
+  parseOptions();
 
-  ensureHaveWritePermission(function() {
-    parseOptions();
-
-    if (!configFileExists()) {
-      options.resetConfig = true;
-    }
+  if (!configFileExists()) {
+    options.resetConfig = true;
+  }
+ })
+ .then(checkRunningStatus)
+ .then(ensureServiceStopped)
+ .then(confirmToReconfigure)
+ .then(tryResetStringConfigs)
+ .then(tryResetBooleanConfigs)
+ .then(writeNewConfigs)
+ .then(finish);
 
-    checkRunningStatus(function() {
-      ensureServiceStopped(function() {
-        confirmToReconfigure(function() {
-          tryResetStringConfigs(function() {
-            tryResetBooleanConfigs(function() {
-              writeNewConfigs(finish);
-            });
-          });
-        });
-      });
-    });
-  });
-});
-});

  Modified: package.json (+1 -0)
===================================================================
--- package.json    2014-09-19 20:20:20 +0900 (194dbd5)
+++ package.json    2014-09-19 20:34:43 +0900 (5738ca1)
@@ -29,6 +29,7 @@
     "morgan": "*",
     "promptly": "*",
     "ps-node": "*",
+    "q": "*",
     "response-time": "*",
     "touch": "*",
     "uid-number": "*",
-------------- next part --------------
HTML����������������������������...
下載 



More information about the Groonga-commit mailing list
Back to archive index