Class: Match::GitHelper

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

Class Method Summary collapse

Class Method Details

.branch_exists?(branch) ⇒ Boolean

Checks if a specific branch exists in the git repo

Returns:

  • (Boolean)


112
113
114
115
116
117
118
119
120
121
# File 'lib/match/git_helper.rb', line 112

def self.branch_exists?(branch)
  return unless @dir

  result = Dir.chdir(@dir) do
    FastlaneCore::CommandExecutor.execute(command: "git branch --list origin/#{branch.shellescape} --no-color -r",
                                          print_all: $verbose,
                                          print_command: $verbose)
  end
  return !result.empty?
end

.checkout_branch(branch) ⇒ Object

Create and checkout an specific branch in the git repo



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/match/git_helper.rb', line 86

def self.checkout_branch(branch)
  return unless @dir

  commands = []
  if branch_exists?(branch)
    # Checkout the branch if it already exists
    commands << "git checkout #{branch.shellescape}"
  else
    # If a new branch is being created, we create it as an 'orphan' to not inherit changes from the master branch.
    commands << "git checkout --orphan #{branch.shellescape}"
    # We also need to reset the working directory to not transfer any uncommitted changes to the new branch.
    commands << "git reset --hard"
  end

  UI.message "Checking out branch #{branch}..."

  Dir.chdir(@dir) do
    commands.each do |command|
      FastlaneCore::CommandExecutor.execute(command: command,
                                            print_all: $verbose,
                                            print_command: $verbose)
    end
  end
end

.clear_changesObject



77
78
79
80
81
82
83
# File 'lib/match/git_helper.rb', line 77

def self.clear_changes
  return unless @dir

  FileUtils.rm_rf(@dir)
  UI.success "🔒  Successfully encrypted certificates repo" # so the user is happy
  @dir = nil
end

.clone(git_url, shallow_clone, manual_password: nil, skip_docs: false, branch: "master") ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/match/git_helper.rb', line 3

def self.clone(git_url, shallow_clone, manual_password: nil, skip_docs: false, branch: "master")
  return @dir if @dir

  @dir = Dir.mktmpdir
  command = "git clone '#{git_url}' '#{@dir}'"
  command << " --depth 1" if shallow_clone

  UI.message "Cloning remote git repo..."
  FastlaneCore::CommandExecutor.execute(command: command,
                                      print_all: $verbose,
                                  print_command: $verbose)

  UI.user_error!("Error cloning repo, make sure you have access to it '#{git_url}'") unless File.directory?(@dir)

  checkout_branch(branch) unless branch == "master"

  if !Helper.test? and GitHelper.match_version(@dir).nil? and manual_password.nil? and File.exist?(File.join(@dir, "README.md"))
    UI.important "Migrating to new match..."
    ChangePassword.update(params: { git_url: git_url,
                                git_branch: branch,
                             shallow_clone: shallow_clone },
                                      from: "",
                                        to: Encrypt.new.password(git_url))
    return self.clone(git_url, shallow_clone)
  end

  copy_readme(@dir) unless skip_docs
  Encrypt.new.decrypt_repo(path: @dir, git_url: git_url, manual_password: manual_password)

  return @dir
end

.commit_changes(path, message, git_url, branch = "master") ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/match/git_helper.rb', line 53

def self.commit_changes(path, message, git_url, branch = "master")
  Dir.chdir(path) do
    return if `git status`.include?("nothing to commit")

    Encrypt.new.encrypt_repo(path: path, git_url: git_url)
    File.write("match_version.txt", Match::VERSION) # unencrypted

    commands = []
    commands << "git add -A"
    commands << "git commit -m #{message.shellescape}"
    commands << "git push origin #{branch.shellescape}"

    UI.message "Pushing changes to remote git repo..."

    commands.each do |command|
      FastlaneCore::CommandExecutor.execute(command: command,
                                          print_all: $verbose,
                                      print_command: $verbose)
    end
  end
  FileUtils.rm_rf(path)
  @dir = nil
end

.copy_readme(directory) ⇒ Object

Copies the README.md into the git repo



124
125
126
127
# File 'lib/match/git_helper.rb', line 124

def self.copy_readme(directory)
  template = File.read("#{Helper.gem_path('match')}/lib/assets/READMETemplate.md")
  File.write(File.join(directory, "README.md"), template)
end

.generate_commit_message(params) ⇒ Object



35
36
37
38
39
40
41
42
43
44
# File 'lib/match/git_helper.rb', line 35

def self.generate_commit_message(params)
  # 'Automatic commit via fastlane'
  [
    "[fastlane]",
    "Updated",
    params[:app_identifier],
    "for",
    params[:type].to_s
  ].join(" ")
end

.match_version(workspace) ⇒ Object



46
47
48
49
50
51
# File 'lib/match/git_helper.rb', line 46

def self.match_version(workspace)
  path = File.join(workspace, "match_version.txt")
  if File.exist?(path)
    Gem::Version.new(File.read(path))
  end
end