1. carbonica
  2. amp

Source

amp /

Filename Size Date modified Message
bin
bugs
ext/amp
lib
man
site/src
spec
tasks
test
233 B
Cleaning up Rakefile.
620 B
Fixed an issue with how repositories were picked. Each repository type was allowed to search upwards, so a .git repo inside a .hg repo would be ignored since the .hg repo would be picked up first. Also added some data for full-repo git tests.
24 B
removed dependency on flog/flay. we don't use them.
452 B
added trailing newline
3.3 KB
Updated some license notes about included code.
1.1 KB
work in tracking down this gnarly bug
13.9 KB
Fixed issue with loading dirstates. Ruby1.9 specifies that Hash#select returns a hash, not an array anymore.
3.6 KB
Fixed a failing ChangeGroup test. Moving exceptions into the Amp module to clean up the top-level namespace.
4.7 KB
Added a basic git data structure object for loose objects. Will refine soon.
415 B
added more names for future releases
1.6 KB
work to patch.rb
6.6 KB
working on fixing a bug in update
733 B
warning: useless commit

Amp Release v0.6.0 (John Locke)

Homepage: http://amp.carboni.ca
IRC: #amp-vcs on irc.freenode.net
Git: http://github.com/michaeledgar/amp
Mercurial: http://bitbucket.org/carbonica/amp
Author: Michael Edgar & Ari Brown
Copyright: 2009-2010 License: GPLv2 (inherited from Mercurial)

Description:

A ruby interface to Mercurial repositories, from the command line or a program.

Features:

  • Supports Mercurial repositories completely!
  • Extremely flexible command system.
  • Ampfiles allow easy command creation/modification.
  • Customizable workflows allow multiple command interfaces to the same operations

Known Issues:

  • No Windows support.
  • Importing git patches is untested and likely won't run.
  • creating bundles (the bundle command) likely fails.

Synopsis:

% amp add file.txt
edit...
% amp commit -m "updated the file"
% amp push

Nothing really changes from using the hg command. There are a few differences here and there (see amp help [COMMAND]), but really, it's pretty much the same.

Right now, we're trying to simplify the docs, to make it easier to tell what things are relevant to someone working with Amp. Most of our documentation is on our website, but here's an example of some Ampfile code:

command "stats" do |c|
  c.workflow :hg
  c.desc "Prints how many commits each user has contributed"
  c.on_run do |opts, args|
    repo = opts[:repository]
    users = Hash.new {|h, k| h[k] = 0}
    repo.each do |changeset|
      users[changeset.user.split("@").first] += 1
    end
    users.to_a.sort {|a,b| b[1] <=> a[1]}.each do |u,c|
      puts "#{u}: #{c}"
    end
  end
end

In the on_run handler, repo is a LocalRepository object. Its #each method iterates over ChangeSet objects, which store information about that particular commit, including which user committed it. These objects will be most relevant to users, but we'll try to make things more obvious as we refine our documentation. At the very least, we've tried to provide a useful description of every method we can.

Example:


% amp add file.txt
edit...
% amp commit -m "leethaxness"
% amp push

Nothing really changes from using the hg/git command. There are a few differences here and there (see amp help [COMMAND]), but really, it's pretty much the same.

Using amp as a library:

require "amp"
include Amp

repo = Repositories::pick "/Users/ari/src/amp.code"
remote = Repositories::pick "https://user:password@bitbucket.org/carbonica/amp"

make a file...

Dir.chdir "/Users/ari/src/amp.code/"
open "test.txt", "w" {|f| f.puts "hello, world!" }

and add it to the repo!

repo.add "test.txt"

commit

repo.commit :message => 'blah'

do some more things, pull and update...

result = repo.pull remote
result = repo.update if result.success?

(puts "You need to fix things!"; new_irb_session binding) unless result.success?
# type result[:unresolved] to get a list of conflicts

and push!

repo.push remote

Everything here is really straight forward. Plus, if it's not, we've taken the liberty to document as much as possible.

Requirements:

  • Ruby
  • Nothing else! (except rubygems to install - for now)

Install:

sudo gem install amp --no-wrappers

License:

See the LICENSE file.