Rugged - fetch, pull rebase possible?

git, ruby, rugged

Solution

git fetch:

remote = Rugged::Remote.lookup(repo, "origin")
remote.connect(:fetch) do |r|
  r.download
  r.update_tips!
end

git merge:

merge_index = repo.merge_commits(
  Rugged::Branches.lookup(repo, "master").tip,
  Rugged::Branches.lookup(repo, "origin/master").tip
)

raise "Conflict detected!" if merge_index.conflicts?

merge_commit = Rugged::Commit.create(repo, {
  parents: [
    Rugged::Branches.lookup(repo, "master").tip,
    Rugged::Branches.lookup(repo, "origin/master").tip
  ],
  tree: merge_index.write_tree(repo),
  message: 'Merged `origin/master` into `master`',
  author:    { name: "User", email: "example@test.com" },
  committer: { name: "User", email: "example@test.com" },
  update_ref: 'master'
})

git rebase:

Rebasing was not implemented yet in libgit2, and thus is not available in Rugged.

In general, your use case sounds very high level, while the rugged API is currently a bit more focused on low-level git repository access and modification. Eventually, we'll also have many higher-level helpers (like a more simple/correct `pull`) in the future, but we're not there yet.

Problem

Using `rugged` how do you perform the following operations: `fetch`, `pull` and `rebase`? I am using the `development` branch and after reviewing its documentation found here as a guide to the `Remote` class. EDIT: Since `git pull` is just a shorthand for `git fetch` and `git merge FETCH_HEAD` the better question is how to perform `git fetch`, `git merge` and `git rebase`.

Original source