git.js 925 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. const path = require('path');
  2. const fs = require('fs');
  3. exports.getGitVersion = function(repo) {
  4. var git = path.join(repo, '.git');
  5. var headPath = path.join(git, 'HEAD');
  6. var head;
  7. try {
  8. head = fs.readFileSync(headPath, 'utf8').trim();
  9. } catch (e) {
  10. return void 0;
  11. }
  12. if (/^[0-9a-f]{40}$/i.test(head)) {
  13. return head;
  14. }
  15. var refMatch = /^ref: (.*)$/.exec(head);
  16. if (!refMatch) {
  17. return void 0;
  18. }
  19. var ref = refMatch[1];
  20. var refPath = path.join(git, ref);
  21. try {
  22. return fs.readFileSync(refPath, 'utf8').trim();
  23. } catch (e) {
  24. // noop
  25. }
  26. var packedRefsPath = path.join(git, 'packed-refs');
  27. var refsRaw;
  28. try {
  29. refsRaw = fs.readFileSync(packedRefsPath, 'utf8').trim();
  30. } catch (e) {
  31. return void 0;
  32. }
  33. var refsRegex = /^([0-9a-f]{40})\s+(.+)$/gm;
  34. var refsMatch;
  35. var refs = {};
  36. while (refsMatch = refsRegex.exec(refsRaw)) {
  37. refs[refsMatch[2]] = refsMatch[1];
  38. }
  39. return refs[ref];
  40. };