2017-01-18 15:58:20 +00:00
// Generated by CoffeeScript 1.12.2
2016-03-28 13:21:25 +00:00
/ *
Copyright 2016 Resin . io
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
( function ( ) {
2016-07-19 16:12:36 +00:00
var loadConfig ;
loadConfig = function ( source ) {
2016-10-28 20:45:18 +00:00
var _ , config , configPath , error , fs , jsYaml , path , result ;
2016-07-19 16:12:36 +00:00
fs = require ( 'fs' ) ;
path = require ( 'path' ) ;
_ = require ( 'lodash' ) ;
jsYaml = require ( 'js-yaml' ) ;
configPath = path . join ( source , '.resin-sync.yml' ) ;
try {
config = fs . readFileSync ( configPath , {
encoding : 'utf8'
} ) ;
result = jsYaml . safeLoad ( config ) ;
} catch ( error1 ) {
error = error1 ;
if ( error . code === 'ENOENT' ) {
return { } ;
}
throw error ;
}
if ( ! _ . isPlainObject ( result ) ) {
throw new Error ( "Invalid configuration file: " + configPath ) ;
}
return result ;
} ;
2016-03-28 13:21:25 +00:00
module . exports = {
2016-07-19 16:12:36 +00:00
signature : 'sync [uuid]' ,
description : '(beta) sync your changes to a device' ,
2017-01-18 15:58:20 +00:00
help : 'Warning: \'resin sync\' requires an openssh-compatible client and \'rsync\' to\nbe correctly installed in your shell environment. For more information (including\nWindows support) please check the README here: https://github.com/resin-io/resin-cli\n\nUse this command to sync your local changes to a certain device on the fly.\n\nAfter every \'resin sync\' the updated settings will be saved in\n\'<source>/.resin-sync.yml\' and will be used in later invocations. You can\nalso change any option by editing \'.resin-sync.yml\' directly.\n\nHere is an example \'.resin-sync.yml\' :\n\n $ cat $PWD/.resin-sync.yml\n uuid: 7cf02a6\n destination: \'/usr/src/app\'\n before: \'echo Hello\'\n after: \'echo Done\'\n ignore:\n - .git\n - node_modules/\n\nCommand line options have precedence over the ones saved in \'.resin-sync.yml\'.\n\nIf \'.gitignore\' is found in the source directory then all explicitly listed files will be\nexcluded from the syncing process. You can choose to change this default behavior with the\n\'--skip-gitignore\' option.\n\nExamples:\n\n $ resin sync 7cf02a6 --source . --destination /usr/src/app\n $ resin sync 7cf02a6 -s /home/user/myResinProject -d /usr/src/app --before \'echo Hello\' --after \'echo Done\'\n $ resin sync --ignore lib/\n $ resin sync --verbose false\n $ resin sync' ,
2016-03-28 13:21:25 +00:00
permission : 'user' ,
primary : true ,
options : [
{
signature : 'source' ,
parameter : 'path' ,
2016-07-19 16:12:36 +00:00
description : 'local directory path to synchronize to device' ,
2016-03-28 13:21:25 +00:00
alias : 's'
2016-07-19 16:12:36 +00:00
} , {
signature : 'destination' ,
parameter : 'path' ,
description : 'destination path on device' ,
alias : 'd'
2016-03-28 13:21:25 +00:00
} , {
signature : 'ignore' ,
parameter : 'paths' ,
description : 'comma delimited paths to ignore when syncing' ,
alias : 'i'
2016-07-19 16:12:36 +00:00
} , {
signature : 'skip-gitignore' ,
boolean : true ,
description : 'do not parse excluded/included files from .gitignore'
2016-03-28 13:21:25 +00:00
} , {
signature : 'before' ,
parameter : 'command' ,
description : 'execute a command before syncing' ,
alias : 'b'
} , {
2016-07-19 16:12:36 +00:00
signature : 'after' ,
parameter : 'command' ,
description : 'execute a command after syncing' ,
alias : 'a'
2016-03-28 13:21:25 +00:00
} , {
signature : 'port' ,
parameter : 'port' ,
description : 'ssh port' ,
alias : 't'
2016-07-19 16:12:36 +00:00
} , {
signature : 'progress' ,
boolean : true ,
description : 'show progress' ,
alias : 'p'
2016-06-22 14:59:14 +00:00
} , {
signature : 'verbose' ,
boolean : true ,
description : 'increase verbosity' ,
alias : 'v'
2016-03-28 13:21:25 +00:00
}
] ,
action : function ( params , options , done ) {
2016-07-19 16:12:36 +00:00
var Promise , fs , path , patterns , resin , resinSync ;
fs = require ( 'fs' ) ;
path = require ( 'path' ) ;
2016-12-16 14:34:05 +00:00
resin = require ( '../resin-sdk' ) ;
2016-07-19 16:12:36 +00:00
Promise = require ( 'bluebird' ) ;
2016-03-28 13:21:25 +00:00
resinSync = require ( 'resin-sync' ) ;
2016-04-25 12:32:58 +00:00
patterns = require ( '../utils/patterns' ) ;
2016-07-19 16:12:36 +00:00
return Promise [ "try" ] ( function ( ) {
try {
fs . accessSync ( path . join ( process . cwd ( ) , '.resin-sync.yml' ) ) ;
} catch ( error1 ) {
if ( options . source == null ) {
throw new Error ( 'No --source option passed and no \'.resin-sync.yml\' file found in current directory.' ) ;
}
}
if ( options . source == null ) {
options . source = process . cwd ( ) ;
}
if ( options . ignore != null ) {
options . ignore = options . ignore . split ( ',' ) ;
2016-04-25 12:32:58 +00:00
}
2016-07-19 16:12:36 +00:00
return Promise . resolve ( params . uuid ) . then ( function ( uuid ) {
var savedUuid ;
if ( uuid == null ) {
savedUuid = loadConfig ( options . source ) . uuid ;
return patterns . inferOrSelectDevice ( savedUuid ) ;
}
return resin . models . device . has ( uuid ) . then ( function ( hasDevice ) {
if ( ! hasDevice ) {
throw new Error ( "Device not found: " + uuid ) ;
}
return uuid ;
} ) ;
} ) . then ( function ( uuid ) {
return resinSync . sync ( uuid , options ) ;
} ) ;
2016-04-25 12:32:58 +00:00
} ) . nodeify ( done ) ;
2016-03-28 13:21:25 +00:00
}
} ;
} ) . call ( this ) ;