Module: Braid::Operations::Helpers

Included in:
Command, Command
Defined in:
lib/braid/operations.rb

Instance Method Summary collapse

Instance Method Details

#clean_svn_revision(revision) ⇒ Object



151
152
153
154
155
156
157
# File 'lib/braid/operations.rb', line 151

def clean_svn_revision(revision)
  if revision
    revision.to_i
  else
    nil
  end
end

#determine_target_commit(params, options) ⇒ Object



194
195
196
197
198
199
200
201
202
203
204
# File 'lib/braid/operations.rb', line 194

def determine_target_commit(params, options)
  if options["revision"]
    if params["type"] == "svn"
      invoke(:svn_git_commit_hash, params["local_branch"], options["revision"])
    else
      invoke(:git_rev_parse, options["revision"])
    end
  else
    invoke(:git_rev_parse, params["local_branch"])
  end
end

#display_revision(type, revision) ⇒ Object



206
207
208
# File 'lib/braid/operations.rb', line 206

def display_revision(type, revision)
  type == "svn" ? "r#{revision}" : "'#{revision[0, 7]}'"
end

#extract_version(cmd) ⇒ Object



119
120
121
122
# File 'lib/braid/operations.rb', line 119

def extract_version(cmd)
  status, out, err = exec!("#{cmd} --version")
  return out.sub(/^.* version/, "").strip
end

#find_git_revision(commit) ⇒ Object



145
146
147
148
149
# File 'lib/braid/operations.rb', line 145

def find_git_revision(commit)
  invoke(:git_rev_parse, commit)
rescue Braid::Commands::ShellExecutionError
  raise Braid::Git::UnknownRevision, "unknown revision: #{commit}"
end

#validate_revision_option(params, options) ⇒ Object

Make sure the revision is valid, then clean it.



180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/braid/operations.rb', line 180

def validate_revision_option(params, options)
  if options["revision"]
    case params["type"]
    when "git"
      options["revision"] = find_git_revision(options["revision"])
    when "svn"
      validate_svn_revision(params["revision"], options["revision"], params["remote"])
      options["revision"] = clean_svn_revision(options["revision"])
    end
  end

  true
end

#validate_svn_revision(old_revision, new_revision, path) ⇒ Object



159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/braid/operations.rb', line 159

def validate_svn_revision(old_revision, new_revision, path)
  return unless new_revision = clean_svn_revision(new_revision)
  old_revision = clean_svn_revision(old_revision)

  # TODO add checks for unlocked mirrors
  if old_revision
    if new_revision < old_revision
      raise Braid::Commands::LocalRevisionIsHigherThanRequestedRevision
    elsif new_revision == old_revision
      raise Braid::Commands::MirrorAlreadyUpToDate
    end
  end

  if path && invoke(:svn_remote_head_revision, path) < new_revision
    raise Braid::Commands::RequestedRevisionIsHigherThanRemoteRevision
  end

  true
end

#verify_version(cmd, required) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/braid/operations.rb', line 124

def verify_version(cmd, required)
  required_version = required.split(".")
  actual_version   = extract_version(cmd).split(".")
  actual_version.each_with_index do |actual_piece, idx|
    required_piece = required_version[idx]

    return true unless required_piece

    case (actual_piece <=> required_piece)
      when -1
        return false
      when 1
        return true
      when 0
        next
    end
  end

  return actual_version.length >= required_version.length
end