mirror of https://github.com/IoTcat/FDC.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.0 KiB
120 lines
3.0 KiB
5 years ago
|
/*
|
||
|
* @Author: IoTcat (https://iotcat.me)
|
||
|
* @Date: 2019-12-31 11:59:49
|
||
|
* @Last Modified by: IoTcat
|
||
|
* @Last Modified time: 2019-12-31 18:28:21
|
||
|
*/
|
||
|
module.exports = function(o_params){
|
||
|
|
||
|
/* factory mode */
|
||
|
var o = {
|
||
|
dir: __dirname,
|
||
|
debug: false,
|
||
|
allowNotice: true,
|
||
|
pull: (params, callback, err_callback) => pull(params, callback, err_callback),
|
||
|
push: (params, callback) => push(params, callback),
|
||
|
sync: (callback, err_callback, params_pull, params_push) => sync(callback, err_callback, params_pull, params_push),
|
||
|
schedule: (time, callback, err_callback, params_pull, params_push) => schedule(time, callback, err_callback, params_pull, params_push)
|
||
|
}
|
||
|
|
||
|
|
||
|
/* merge params */
|
||
|
Object.assign(o, o_params);
|
||
|
|
||
|
|
||
|
/* modules import */
|
||
|
const cron = require('node-schedule');
|
||
|
const git = require('simple-git')(o.dir);
|
||
|
|
||
|
/* Git pull action */
|
||
|
var pull = function(params_user, callback, err_callback){
|
||
|
var params = {
|
||
|
remote: {
|
||
|
repo: 'origin',
|
||
|
branch: 'master'
|
||
|
},
|
||
|
add: {
|
||
|
path: './*'
|
||
|
},
|
||
|
commit: {
|
||
|
message: "Committed by cron-git from "+ require('os').hostname()
|
||
|
},
|
||
|
pull_params: {}
|
||
|
}
|
||
|
Object.assign(params, params_user);
|
||
|
|
||
|
git.add(params.add.path)
|
||
|
.commit(params.commit.message)
|
||
|
.pull(params.remote.repo,
|
||
|
params.remote.branch,
|
||
|
params.pull_params,
|
||
|
function(err, update){
|
||
|
if(!err){
|
||
|
if(update && (update.summary.changes || update.summary.deletions || update.summary.insertions)){
|
||
|
if(o.allowNotice){
|
||
|
console.log(new Date() + ' - cron-git: git pull done::');
|
||
|
console.log('---------------------------');
|
||
|
console.log(update);
|
||
|
console.log('---------------------------');
|
||
|
}
|
||
|
if(callback !== undefined){
|
||
|
callback(update);
|
||
|
}
|
||
|
}else{
|
||
|
if(o.allowNotice){
|
||
|
console.log(new Date() + ' - cron-git: git pull done. Nothing changed!!');
|
||
|
}
|
||
|
}
|
||
|
}else{
|
||
|
if(o.allowNotice){
|
||
|
console.log(new Date() + ' - cron-git: git pull Failure.');
|
||
|
}
|
||
|
if(err_callback !== undefined){
|
||
|
err_callback(err);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/* Git push action */
|
||
|
var push = function(params_user, callback){
|
||
|
var params = {
|
||
|
add: {
|
||
|
path: './*'
|
||
|
},
|
||
|
commit: {
|
||
|
message: "Committed by cron-git from "+ require('os').hostname()
|
||
|
},
|
||
|
push_params: ['-u', 'origin', 'master']
|
||
|
}
|
||
|
Object.assign(params, params_user);
|
||
|
|
||
|
git.add(params.add.path)
|
||
|
.commit(params.commit.message)
|
||
|
.push(params.push_params, function(){
|
||
|
if(o.allowNotice){
|
||
|
console.log(new Date() + ' - cron-git: git push done.');
|
||
|
}
|
||
|
if(callback !== undefined){
|
||
|
callback();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/* sync action */
|
||
|
var sync = function(callback, err_callback, params_pull, params_push){
|
||
|
pull(params_pull, callback, err_callback);
|
||
|
push(params_push);
|
||
|
}
|
||
|
|
||
|
/* cron sync */
|
||
|
var schedule = function(time, callback, err_callback, params_pull, params_push){
|
||
|
cron.scheduleJob(time, function(){
|
||
|
console.log(new Date() + ' - cron-git: Scheduled sync begin.');
|
||
|
sync(callback, err_callback, params_pull, params_push);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return o;
|
||
|
}
|