class Avm::Git::Launcher::Remote

def add(url)

+git remote add ...+
def add(url)
  git.execute!('remote', 'add', name, url)
end

def exist?

def exist?
  git.execute!('remote').each_line.any? { |line| line.strip == name }
end

def ls

def ls
  git.execute!(['ls-remote', name]).each_line.map do |line|
    x = line.strip.split(/\s+/)
    [x[1], x[0]]
  end.to_h
end

def remove

+git remote rm ...+
def remove
  git.execute!('remote', 'rm', name)
end

def url

+git remote get-url ...+
def url
  git.execute!('remote', 'get-url', name).strip.if_present(nil)
end

def url=(url)

Add or set URL if +url+ is present, remove remote if is blank.
def url=(url)
  if exist? && url.blank?
    remove
  elsif exist? && self.url != url
    url_set(url)
  elsif !exist?
    add(url)
  end
end

def url_set(url)

git remote set-url ...
def url_set(url)
  git.execute!('remote', 'set-url', name, url)
end