list-brahches.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* eslint-disable no-console */
  2. /*
  3. * USAGE:
  4. * node list-branches [OPTION]
  5. *
  6. * OPTIONS:
  7. * --disused : Return disused branches (default)
  8. * --illegal : Return illegal named branches
  9. */
  10. const { execSync } = require('child_process');
  11. const EXCLUDE_TERM_DAYS = 14;
  12. const EXCLUDE_PATTERNS = [
  13. /feat\/custom-sidebar-2$/,
  14. // https://regex101.com/r/Lnx7Pz/2
  15. /dev\/[\d.x]*$/,
  16. ];
  17. class BranchSummary {
  18. constructor(line) {
  19. const splitted = line.split('\t'); // split with '%09'
  20. this.authorDate = new Date(splitted[0].trim());
  21. this.authorName = splitted[1].trim();
  22. this.refName = splitted[2].trim();
  23. this.subject = splitted[3].trim();
  24. }
  25. }
  26. function getExcludeTermDate() {
  27. const date = new Date();
  28. date.setDate(date.getDate() - EXCLUDE_TERM_DAYS);
  29. return date;
  30. }
  31. function getBranchSummaries() {
  32. // exec git for-each-ref
  33. const out = execSync(`\
  34. git for-each-ref refs/remotes \
  35. --sort=-committerdate \
  36. --format='%(authordate:iso) %09 %(authorname) %09 %(refname:short) %09 %(subject)'
  37. `).toString();
  38. // parse
  39. const branchSummaries = out
  40. .split('\n')
  41. .filter(v => v !== '') // trim empty string
  42. .map(line => new BranchSummary(line))
  43. .filter((branchInfo) => { // exclude branches that matches to patterns
  44. return !EXCLUDE_PATTERNS.some(pattern => pattern.test(branchInfo.refName));
  45. });
  46. return branchSummaries;
  47. }
  48. async function main() {
  49. const args = process.argv.slice(2);
  50. const branchSummaries = getBranchSummaries();
  51. const outdated = branchSummaries
  52. .filter(branchInfo => branchInfo.authorDate < getExcludeTermDate()); // exclude data within EXCLUDE_TERM_DAYS
  53. console.log(outdated);
  54. }
  55. main();