Started from strider-git

This commit is contained in:
didier.amyot committed 2014-01-20 08:26:45 -05:00
commit 3c8aafcbc2
12 files changed
+498

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
from mercurial import ui, hg, node
from sys import argv
peer = hg.peer(ui.ui(), {}, argv[1])
for name, rev in peer.branchmap().items():
print(name)
+120
View File
@@ -0,0 +1,120 @@
var gitane = require('gitane')
, exec = require('child_process').exec
, shellescape = require('shell-escape')
, path = require('path')
, _ = require('underscore')
module.exports = {
gitUrl: gitUrl,
sshUrl: sshUrl,
httpUrl: httpUrl,
gitCmd: gitCmd,
gitaneCmd: gitaneCmd,
processBranches: processBranches,
getBranches: getBranches,
shellEscape: shellEscape
}
function shellEscape(one) {
if (!one) {
throw new Error('trying to escape nothing', one)
}
return shellescape([one])
}
// returns [real, safe] urls
function gitUrl(config) {
return (config.auth.type === 'ssh' ? sshUrl : httpUrl)(config)
}
function sshUrl(config) {
var base = config.url.split('//')[1]
, url = shellEscape('git@' + base.replace('/', ':'))
return [url, url]
}
function httpUrl(config) {
var base = config.url.split('//')[1]
, url = config.auth.type + '://' + config.auth.username + ':' + config.auth.password + '@' + base
, safe = config.auth.type + '://[username]:[password]@' + base
return [url, safe]
}
function gitCmd(cmd, cwd, auth, context, done) {
if (auth.type === 'ssh') {
return gitaneCmd(cmd, cwd, auth.privkey, context, done)
}
context.cmd({
cmd: cmd,
cwd: cwd
}, done)
}
// run a strider command with gitane
function gitaneCmd(cmd, dest, privkey, context, done) {
var start = new Date()
context.status('command.start', { command: cmd, time: start, plugin: context.plugin })
gitane.run({
emitter: {
emit: context.status
},
cmd: cmd,
baseDir: dest,
privKey: privkey,
detached: true
}, function (err, stdout, stderr, exitCode) {
var end = new Date()
, elapsed = end.getTime() - start.getTime()
if (err) {
context.log('Gitane error:', err.message)
}
context.log('gitane command done %s; exit code %s; duration %s', cmd, exitCode, elapsed)
context.status('command.done', {exitCode: exitCode, time: end, elapsed: elapsed})
done(err ? 500 : exitCode, stdout + stderr)
})
}
function processBranches(data, done) {
done(null, data.trim().split(/\n+/).map(function (line) {
return line.split(/\s+/)[1].split('/').slice(-1)[0]
}))
}
function getBranches(config, privkey, done) {
if (config.auth.type === 'ssh') {
gitane.run({
cmd: 'git ls-remote -h ' + gitUrl(config)[0],
baseDir: '/',
privKey: config.auth.privkey || privkey,
detached: true
}, function (err, stdout, stderr, exitCode) {
if (err || exitCode !== 0) return done(err || new Error(stderr))
processBranches(stdout, done)
})
} else {
exec('git ls-remote -h ' + httpUrl(config)[0], function (err, stdout, stderr) {
if (err) return done(err)
processBranches(stdout, done)
})
}
}
function getMercurialBranches(repoLocation){
var pythonScript = path.join(__dirname, 'get_branches.py');
var cmd = 'python ' + pythonScript + " " + repoLocation;
exec(cmd, function (err, stdout, stderr) {
if (err){
return console.log(err)
}else{
return console.log(_.filter(stdout.split("\n"),function(v){return !!v} ))
}
})
}
getMercurialBranches('ssh://hg@bitbucket.org/ustraca/crypto')
console.log("ok?")