module GitCli::Stash

Public Instance Methods

stash_changes(msg, include_untracked = true) click to toggle source

Save all the temporary changes so branch switch is possible

# File lib/git_cli/stash.rb, line 29
def stash_changes(msg, include_untracked = true)

  check_vcs

  cmd = []
  cmd << "cd"
  cmd << @wsPath
  cmd << "&&"
  cmd << @vcs.exe_path
  cmd << "stash"
  cmd << "save"

  if not_empty?(msg)
    # have to escape the message for command line purposes
    msg2 = msg.gsub("\"","\\\"").gsub("\\","\\\\")
    cmd << msg2
  end

  # always include untracked since the stash condition
  # is played using scenario under development and must
  # switch branch for any reasons
  if include_untracked
    cmd << "--include-untracked"
  end

  cmdln = cmd.join(" ")
  log_debug "Stash changes : #{cmdln}"
  res = os_exec(cmdln) do |st, res|
    [st.success?, res]
  end

end
stash_clear() click to toggle source
# File lib/git_cli/stash.rb, line 182
def stash_clear

  check_vcs

  cmd = []
  cmd << "cd"
  cmd << @wsPath
  cmd << "&&"
  cmd << @vcs.exe_path
  cmd << "stash clear"

  cmdln = cmd.join(" ")
  log_debug "Clear the stash list (all uncommitted changes lost permanently) : #{cmdln}"
  res = os_exec(cmdln) do |st, res|
    [st.success?, res]
  end
  
end
stash_list() click to toggle source

List all saved temporary changes

# File lib/git_cli/stash.rb, line 65
def stash_list

  check_vcs

  cmd = []
  cmd << "cd"
  cmd << @wsPath
  cmd << "&&"
  cmd << @vcs.exe_path
  cmd << "stash list"

  cmdln = cmd.join(" ")
  log_debug "Stash list : #{cmdln}"
  res = os_exec(cmdln) do |st, res|
    if st.success?
      list = { }
      res.each_line do |l|
        ll = l.split(": ")

        # first element is the stash id
        # 2nd element is the info on branch
        branch = ll[1].split(" ")[-1]


        list[ll[0].strip] = [branch, ll[1..-1].join(": ")] 
      end

      [true, list]
    else
      [false, res]
    end
  end

end
stash_remove(id = nil) click to toggle source
# File lib/git_cli/stash.rb, line 201
def stash_remove(id = nil)
 
  check_vcs

  cmd = []
  cmd << "cd"
  cmd << @wsPath
  cmd << "&&"
  cmd << @vcs.exe_path
  cmd << "stash drop"
  if not is_empty?(id)
    cmd << id
  end

  cmdln = cmd.join(" ")
  log_debug "Stash #{is_empty?(id) ? "remove" : "'#{id}' is being removed"} from list (all uncommitted changes lost permanantly): #{cmdln}"
  res = os_exec(cmdln) do |st, res|
    [st.success?, res]
  end
 
end
stash_restore(id = nil) click to toggle source

Restore the temporary changes Regardless which branch are you in

# File lib/git_cli/stash.rb, line 104
def stash_restore(id = nil)

  check_vcs

  cmd = []
  cmd << "cd"
  cmd << @wsPath
  cmd << "&&"
  cmd << @vcs.exe_path
  cmd << "stash apply"

  if not is_empty?(id)
    cmd << id
  end

  cmdln = cmd.join(" ")
  log_debug "Stash apply (restore the saved state) : #{cmdln}"
  res = os_exec(cmdln) do |st, res|

    [st.success?, res]

  end

end
stash_restore_and_remove(id = nil) click to toggle source
# File lib/git_cli/stash.rb, line 129
def stash_restore_and_remove(id = nil)

  check_vcs

  cmd = []
  cmd << "cd"
  cmd << @wsPath
  cmd << "&&"
  cmd << @vcs.exe_path
  cmd << "stash pop"

  if not is_empty?(id)
    cmd << id
  end

  cmdln = cmd.join(" ")
  log_debug "Stash pop (restore the saved state and delete from list) : #{cmdln}"
  res = os_exec(cmdln) do |st, res|

    [st.success?, res]

  end

end
stash_to_new_branch(branch, id = nil) click to toggle source
# File lib/git_cli/stash.rb, line 154
def stash_to_new_branch(branch, id = nil)

  raise_if_empty(branch, "Branch name must not be empty for stash to branch operation", GitCliException)

  check_vcs

  cmd = []
  cmd << "cd"
  cmd << @wsPath
  cmd << "&&"
  cmd << @vcs.exe_path
  cmd << "stash branch"
  cmd << branch

  if not is_empty?(id)
    cmd << id
  end

  cmdln = cmd.join(" ")
  log_debug "Stash to new branch and delete from list : #{cmdln}"
  res = os_exec(cmdln) do |st, res|

    [st.success?, res]

  end
  
end