tmp-repo

Build Status

Creates and manages git repositories in the operating system's temporary directory. It does this by providing a thin wrapper around the git binary that's pointed at a randomly generated temporary folder.

Installation

gem install tmp-repo

Usage

require 'tmp-repo'

Basics

Creating a new TmpRepo will automatically create a randomly named folder in your system's temp directory and initialize a git repository in it:

repo = TmpRepo.new
repo.working_dir # => #<Pathname:/var/folders/3x/n10r69b16bq_rlcqr3fy0rwc0000gn/T/b068487773901ffe23e66a8259711fa1>

Once created, you can ask your TmpRepo questions and perform operations on it. Don't forget to clean up after yourself when you're finished:

repo.unlink

Creating Files

repo.create_file('foo.txt') do |f|
  f.write("I'm a new file!")
end

OR

file = repo.create_file('foo.txt')
file.write("I'm a new file!")
file.close

Branching

To create a new branch:

repo.create_branch('my_new_branch')

To check out a branch:

repo.checkout('my_other_branch')

To get the current branch:

repo.current_branch  # => 'master'

Staging and Committing

To add all files to the git stage:

repo.add_all

To commit staged files:

repo.commit('Commit message')

Repo Status

TmpRepo instances provide a convenient way to retrieve the status of the repository via the status method. status return values are a simple hash of arrays:

status = repo.status
status[:new_file]  # => ['file1.txt', 'file2.txt']
status[:deleted]   # => ['file3.txt']
status[:modified]  # => ['file4.txt']

Custom Commands

This library only provides wrapper methods around the most common git commands. To run additional git commands, use the git method:

repo.git('rebase master')

In addition, the lower-level in_repo method wraps the given block in a Dir.chdir, meaning the block is executed in the context of the repo's working directory:

repo.in_repo do
  `ls`  # list files in the repo's working directory
end

Requirements

No external requirements.

Running Tests

bundle exec rake should do the trick.

Authors