2012-01-10 4 views
6

Sto cercando una libreria scritta per Node.js che sarò in grado di utilizzare per gestire dall'applicazione web i miei repository locali creati in Mercurial HG.Libreria HG mercurial per Node.js per repository locali

Qualcuno ha implementato qualcosa del genere?

+1

Se non è sul http://search.npmjs.org/ o https://github.com/joyent/node/wiki/modules probabilmente non esiste (pubblicamente) –

risposta

7

Non ho mai sentito parlare di una tale libreria - non è stata annunciata su our mailinglist. L'API stabile per Mercurial è command line, quindi suggerisco di avviare direttamente hg e analizzare l'output. È progettato per essere facile da screen-scrap e puoi personalizzarlo ulteriormente usando templates.

+1

Se si utilizza il server dei comandi è possibile evitare l'overhead di avvio di hg, tuttavia richiede un po 'più di impegno. –

+0

Ci ho pensato, ma come soluzione finale. Grazie per le risposte. – mrzepinski

+0

Se hai trovato utile la risposta (pensavo che fosse negativa), ti preghiamo di ricordare di andare avanti e accettarlo. –

6

Ho creato un modulo disponibile su npm chiamato node-hg proprio per questo motivo.

È un wrapper attorno allo Command Server che emette i comandi tramite stdin e analizza l'output su stdout.

Ecco un esempio di come funziona:

var path = require("path"); 

var hg = require("hg"); 

// Clone into "../example-node-hg" 
var destPath = path.resolve(path.join(process.cwd(), "..", "my-node-hg")); 

hg.clone("http://bitbucket.org/jgable/node-hg", destPath, function(err, output) { 
    if(err) { 
     throw err; 
    } 

    output.forEach(function(line) { 
     console.log(line.body); 
    }); 

    // Add some files to the repo with fs.writeFile, omitted for brevity 

    hg.add(destPath, ["someFile1.txt", "someFile2.txt"], function(err, output) { 
     if(err) { 
      throw err; 
     } 

     output.forEach(function(line) { 
      console.log(line.body); 
     }); 

     var commitOpts = { 
      "-m": "Doing the needful" 
     }; 

     // Commit our new files 
     hg.commit(destPath, commitOpts, function(err, output) { 
      if(err) { 
       throw err; 
      } 

      output.forEach(function(line) { 
       console.log(line.body); 
      }); 
     }); 
    }); 
});