hg.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. var exec = require("child_process").exec;
  2. var fs = require("fs");
  3. var cliCommand = require('../cliCommand.js');
  4. var halt = false;
  5. function error(repoType, task, errorMsg, cb) {
  6. if (halt) return false;
  7. console.error("[Repo-Parser] An error occured while " + task + " in a " + repoType + " repository: " + errorMsg);
  8. halt = true;
  9. return cb("[Repo-Parser] An error occured while " + task + " in a " + repoType + " repository: " + errorMsg);
  10. }
  11. function checkReturn(dataArray, cb) {
  12. if (halt) {
  13. return false;
  14. }
  15. if (Object.keys(dataArray).length > 6) {
  16. Object.keys(dataArray).forEach(function(key) {
  17. if (typeof(dataArray[key]) === 'string') {
  18. dataArray[key] = dataArray[key].replace(/\n/g, '');
  19. }
  20. });
  21. cb(null, dataArray);
  22. }
  23. };
  24. module.exports.parse = function parseHg(folder, cb) {
  25. var data = {};
  26. data.type = 'mercurial';
  27. data.commit_history = []; // temporary
  28. exec(cliCommand(folder, "hg paths default"), function(err, stdout, stderr) {
  29. if(err !== null) {
  30. error("mercurial", "fetching path", stderr, cb);
  31. }
  32. else {
  33. data.url = stdout;
  34. checkReturn(data, cb);
  35. }
  36. });
  37. exec(cliCommand(folder, "hg log --limit 1 --template 'changeset: {rev}:{node|short}\nsummary: {desc}'"), function(err, stdout, stderr) {
  38. if(err !== null) {
  39. error("mercurial", "fetching log", stderr, cb);
  40. }
  41. else {
  42. var changeset = stdout.match(/^changeset:\s+([^\n]+)$/m);
  43. //date = stdout.match(/^date:\s+:([^\n]+)$/m);
  44. var summary = stdout.match(/^summary:\s+([^\n]+)$/m);
  45. data.revision = changeset[1];
  46. data.comment = summary[1];
  47. //data.update_time = date;
  48. checkReturn(data, cb);
  49. }
  50. });
  51. exec(cliCommand(folder, "hg branch"), function(err, stdout, stderr) {
  52. if(err !== null) {
  53. error("mercurial", "fetching branch", stderr, cb);
  54. }
  55. else {
  56. data.branch = stdout;
  57. checkReturn(data, cb);
  58. }
  59. });
  60. fs.stat(folder+".hg", function(err, stats) {
  61. if(err !== null) {
  62. error("mercurial", "fetching stats", "no error available", cb);
  63. }
  64. else {
  65. data.update_time = stats.mtime;
  66. checkReturn(data, cb);
  67. }
  68. });
  69. }