diff-machines
diff files between machines over ssh.
Install
npm i maboiteaspam/diff-machines -g
Usage
diff-machines
is a binary to install globally.
diff files between machines over ssh. Usage diff-machines [hostA] [hostB] [files or services...] diff-machines [opts] -- [hostA] [hostB] [files or services...] Options -v verbose -h show help Examples diff-machines user@hostA:port user@hostB:port php .bashrc diff-machines -v -- vagrant vagrant php .bashrc diff-machines -h
Example
It will diff the service php
and the file .bashrc
between vagrant
and vagrant
boxes.
diff-machines -v -- vagrant@localhost:2222 vagrant@localhost:2222 php .bashrc
The result is sent to stdout
and produce unified patch with support of jsdiff
# node bin.js vagrant vagrant php .bashrc Index: /etc/php.ini===================================================================--- /etc/php.ini+++ /etc/php.ini Index: .bashrc===================================================================--- .bashrc+++ .bashrc
password credentials-like requires you to register the machine into a configuration file
located on cwd
. See below.
Then you must use its alias when you invoke diff-machines
diff-machines -v -- vagrant vagrant php .bashrc
Configuration
diff-machines
can read a configuration file located on cwd
.
This file exports a function()
which returns an object
.
This configuration object can configure ssh hosts
and services
by name.
service
are functions resolver which receives an sshConn
of ssh2-utils
and invoke call(err, filePath)
.
filePath
is the location of the file identified for the given service
.
configuration
host1:{} host2:{} services: { ; } { ; }
In this example,
php
ini file is resolved with the help of the php
binary itself. Cross-distro.
notFound
, demonstrate that passing anything into err
will effectively stop the program.
diff-svc.js
var SSH2 = module { var ssh = ; return 'vagrant': 'host':'127.0.0.1' port: 2222 username: 'vagrant' password: 'vagrant' 'services': { ssh } { } };
Re-usable services
It s possible to pass in not service
name of the local
config object, rather than,
module
names.
So if one would export the php
service to a module name php-ini
, that would look like,
index.js
var SSH2 = var ssh = ; module { ssh;}
It would then be possible to invoke diff-machines
in such fashion
diff-machines -v -- vagrant vagrant php-ini .bashrc
Obviously you d need to npm i php-ini --save
before that.
Thus lock the remote dependency into a package json of your projects.
Dev
Kick-start your hacks like this,
git clone..
vagrant up
node bin.js vagrant vagrant php .bashrc
node bin.js -v -- vagrant vagrant php .bashrc
More
- https://github.com/kpdecker/jsdiff
- https://github.com/sindresorhus/multiline
- https://github.com/mscdex/ssh2/
- https://github.com/maboiteaspam/ssh2-utils
- https://github.com/maboiteaspam/diff-machines/blob/master/diff-svc.js
ssh & vagrant
~/.ssh/config
Host localhost
HostName 127.0.0.1
Port 2222
StrictHostKeyChecking no