Skip to content

Instantly share code, notes, and snippets.

@spraints
Last active September 4, 2015 19:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spraints/07363dde0a6a7ba122ba to your computer and use it in GitHub Desktop.
Save spraints/07363dde0a6a7ba122ba to your computer and use it in GitHub Desktop.

Terminal 1:

ruby 01-build-repo.rb test.git
ruby 02b-read-refs.rb test.git

Terminal 2:

bash 02a-update-and-pack.sh test.git

Terminal 1 will say:

02b-read-refs.rb:10:in `each': Failed to open directory '/Users/spraints/github/slumlord/07363dde0a6a7ba122ba/test.git//refs/heads/': No such file or directory (Rugged::OSError)
        from 02b-read-refs.rb:10:in `each'
        from 02b-read-refs.rb:10:in `to_a'
        from 02b-read-refs.rb:10:in `block in <main>'
        from 02b-read-refs.rb:6:in `loop'
        from 02b-read-refs.rb:6:in `<main>'
require "rugged"
repo_path = ARGV.first or raise "Usage: ruby #{$0} TESTREPOPATH"
system "rm", "-rf", repo_path
repo = Rugged::Repository.init_at(repo_path, :bare)
blob_sha = repo.write("blah blah", :blob)
commit_shas = (1..100).map do |i|
tree = Rugged::Tree::Builder.new(repo)
tree << {:type => :blob, :name => "file.txt", :oid => blob_sha, :filemode => 0100644}
sig = {:email => "me@example.com", :name => "Me", :time => Time.now}
Rugged::Commit.create repo,
:tree => tree.write,
:update_ref => "refs/heads/test/#{i}",
:message => "testing #{i}",
:parents => [],
:author => sig,
:committer => sig
end
repo.close
#!/bin/bash
set -e
set -x
export GIT_DIR=$1
test -f ${GIT_DIR}/HEAD
set +x
shas=$(git for-each-ref --format '%(objectname)' | sort -u)
echo Cycling refs/heads/master through $(echo ${shas} | wc -w) shas
heads=${GIT_DIR}/refs/heads
while true; do
for sha in ${shas}; do
git pack-refs --all
test -d ${heads} && rmdir ${heads}
git update-ref refs/heads/master ${sha}
done
done
require "rugged"
repo_path = ARGV.first or raise "Usage: ruby #$0 REPOPATH"
n = 0
loop do
n += 1
print "." if n % 1000 == 0
repo = Rugged::Repository.new(repo_path)
repo.refs("refs/heads/*").to_a
repo.close
end
source "http://rubygems.org"
gem "rugged"
GEM
remote: http://rubygems.org/
specs:
rugged (0.23.2)
PLATFORMS
ruby
DEPENDENCIES
rugged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment