Class: Releasinator::GitUtil

Inherits:
Object
  • Object
show all
Defined in:
lib/git_util.rb

Class Method Summary collapse

Class Method Details

.cachedObject



50
51
52
# File 'lib/git_util.rb', line 50

def self.cached
  CommandProcessor.command("git diff --cached")
end

.checkout(branch_name) ⇒ Object



72
73
74
75
76
# File 'lib/git_util.rb', line 72

def self.checkout(branch_name)
  if get_current_branch != branch_name
    CommandProcessor.command("git checkout #{branch_name}")
  end
end

.confirm_tag_overwrite(new_tag) ⇒ Object



78
79
80
81
82
83
84
85
# File 'lib/git_util.rb', line 78

def self.confirm_tag_overwrite(new_tag)
  tag_results = CommandProcessor.command('git tag -l')
  tag_results.split.each do |existing_tag|
    if existing_tag == new_tag
      Printer.check_proceed("Tag #{existing_tag} already present. Overwrite tag #{existing_tag}?", "Tag #{existing_tag} not overwritten.")
    end
  end
end

.delete_branch(branch_name) ⇒ Object



58
59
60
61
62
# File 'lib/git_util.rb', line 58

def self.delete_branch(branch_name)
  if has_branch? branch_name
    CommandProcessor.command("git branch -D #{branch_name}")
  end
end

.detached?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/git_util.rb', line 38

def self.detached?
  "" == CommandProcessor.command("git symbolic-ref --short -q HEAD | cat").strip
end

.diffObject



46
47
48
# File 'lib/git_util.rb', line 46

def self.diff
  CommandProcessor.command("git diff")
end

.fetchObject



13
14
15
# File 'lib/git_util.rb', line 13

def self.fetch()
  CommandProcessor.command("git fetch origin --prune --recurse-submodules -j9")
end

.get_current_branchObject



34
35
36
# File 'lib/git_util.rb', line 34

def self.get_current_branch
  CommandProcessor.command("git symbolic-ref --short HEAD").strip
end

.get_local_branch_sha1(branch_name) ⇒ Object



91
92
93
# File 'lib/git_util.rb', line 91

def self.get_local_branch_sha1(branch_name)
  CommandProcessor.command("git rev-parse --verify #{branch_name}").strip
end

.get_local_head_sha1Object



87
88
89
# File 'lib/git_util.rb', line 87

def self.get_local_head_sha1
  CommandProcessor.command("git rev-parse --verify head").strip
end

.get_remote_branch_sha1(branch_name) ⇒ Object



95
96
97
# File 'lib/git_util.rb', line 95

def self.get_remote_branch_sha1(branch_name)
  CommandProcessor.command("git rev-parse --verify origin/#{branch_name}").strip
end

.has_branch?(branch_name) ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/git_util.rb', line 64

def self.has_branch?(branch_name)
  "" != CommandProcessor.command("git branch --list #{branch_name}").strip
end

.has_remote_branch?(branch_name) ⇒ Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/git_util.rb', line 68

def self.has_remote_branch?(branch_name)
  "" != CommandProcessor.command("git branch --list -r #{branch_name}").strip
end

.init_gh_pagesObject



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/git_util.rb', line 110

def self.init_gh_pages
  if !has_branch? "gh-pages"
    if has_remote_branch? "origin/gh-pages"
      checkout("gh-pages")
    else
      CommandProcessor.command("git checkout --orphan gh-pages")
      CommandProcessor.command("GLOBIGNORE='.git' git rm -rf *")
      #http://stackoverflow.com/questions/19363795/git-rm-doesnt-remove-all-files-in-one-go
      CommandProcessor.command("GLOBIGNORE='.git' git rm -rf *")
      CommandProcessor.command("touch README.md")
      CommandProcessor.command("git add .")
      CommandProcessor.command("git commit -am \"Initial gh-pages commit\"")
      CommandProcessor.command("git push -u origin gh-pages")
    end
  end
end

.is_clean_git?Boolean

Returns:

  • (Boolean)


29
30
31
32
# File 'lib/git_util.rb', line 29

def self.is_clean_git?
  any_changes = CommandProcessor.command("git status --porcelain")
  '' == any_changes
end

.push_branch(branch_name) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/git_util.rb', line 17

def self.push_branch(branch_name)
  checkout(branch_name)
  fetch()
  # always merge to include any extra commits added during release process
  CommandProcessor.command("git merge origin/#{branch_name} --no-edit")
  CommandProcessor.command("git push origin #{branch_name}")
end

.push_tag(tag_name) ⇒ Object



25
26
27
# File 'lib/git_util.rb', line 25

def self.push_tag(tag_name)
  CommandProcessor.command("git push origin #{tag_name}")
end

.repo_urlObject



54
55
56
# File 'lib/git_util.rb', line 54

def self.repo_url
  CommandProcessor.command("git config --get remote.origin.url").strip
end

.reset_repo(branch_name) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/git_util.rb', line 5

def self.reset_repo(branch_name)
  # resets the repo to a clean state
  checkout(branch_name)
  fetch()
  CommandProcessor.command("git reset --hard origin/#{branch_name}")
  CommandProcessor.command("git clean -x -d -f")
end

.tag(new_tag, changelog) ⇒ Object



99
100
101
102
103
104
105
106
107
108
# File 'lib/git_util.rb', line 99

def self.tag(new_tag, changelog)
  confirm_tag_overwrite(new_tag)
  puts "tagging with changelog: \n\n#{changelog}\n".yellow
  changelog_tempfile = Tempfile.new("#{new_tag}.changelog")
  changelog_tempfile.write(changelog)
  changelog_tempfile.close
  # include changelog in annotated tag
  CommandProcessor.command("git tag -a -f #{new_tag} -F #{changelog_tempfile.path}")
  changelog_tempfile.unlink
end

.untracked_filesObject



42
43
44
# File 'lib/git_util.rb', line 42

def self.untracked_files
  CommandProcessor.command("git ls-files --others --exclude-standard")
end