'use strict';

var ParentCommand = require('../command/spawn').SpawnCommand,
	inherits = require('util').inherits;

function Scm(params) {
	ParentCommand.call(this, params);
	this.repository = params.repository;
	if (!this.repository && !this.cwd) throw new Error(
		'`repository` or `cwd` must be set'
	);
}

exports.BaseScm = Scm;

inherits(Scm, ParentCommand);

/**
 * Clone repository to the `dst` update to `rev` and  set `this.cwd` to `dst`
 */
Scm.prototype.clone = function(dst, rev, callback) {
};

/**
 * Pull changes from remote repository without update
 */
Scm.prototype.pull = function(rev, callback) {
};

/**
 * Returns string id of current revision
 */
Scm.prototype.getId = function(callback) {
};

/**
 * Returns array of changes between revisions
 */
Scm.prototype.getChanges = function(rev1, rev2, callback) {
};

/**
 * Updates to revision
 */
Scm.prototype.update = function(rev, callback) {
};