Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. require 'pathname'
  4. require 'tmpdir'
  5. require 'git'
  6. require 'github_api'
  7. require 'json'
  8. require 'yaml'
  9.  
  10. YAML_FRONT_MATTER_REGEXP = /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
  11.  
  12. def fileitems(pattern = 'docs/**/README.md')
  13. Pathname.glob(pattern).select do |item|
  14. item if item.read =~ YAML_FRONT_MATTER_REGEXP
  15. end
  16. end
  17.  
  18. def mktmpdir(prefix, &block)
  19. pwd = Dir.pwd
  20. Dir.mktmpdir(prefix) { |dir| Dir.chdir(dir, &block) }
  21. ensure
  22. Dir.chdir(pwd)
  23. end
  24.  
  25. def jsonify(keys, args)
  26. JSON.pretty_generate(Hash[keys.zip(args)])
  27. end
  28.  
  29. def meta(data)
  30. front_matter = data.scan(YAML_FRONT_MATTER_REGEXP).flatten.join
  31. YAML.safe_load(front_matter)
  32. end
  33.  
  34. def last_commit(git_dir)
  35. base = Git::Base.open(git_dir)
  36. last_commit = Git::Lib.new(base).full_log_commits.first
  37. klass = Struct.new(*last_commit.keys.map(&:to_sym))
  38. klass.new(*last_commit.values)
  39. end
  40.  
  41. def remote_vars(git_dir)
  42. git = Git.open(git_dir)
  43. r = git.remote
  44. [r.name, r.url]
  45. end
  46.  
  47.  
  48. if __FILE__ == $PROGRAM_NAME
  49. metas = []
  50.  
  51. commit = last_commit('.')
  52. items = fileitems.map(&:dirname).map(&:basename)
  53.  
  54. fileitems.each do |file|
  55. m = meta(file.read)
  56. m['last_commit'] = commit.sha
  57. m['tree'] = commit.tree
  58. m['remote'] = remote_vars('.')
  59. metas << m
  60. end
  61.  
  62. puts jsonify(items, metas)
  63. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement