<<

NAME

Vcs.pm -- a simple abstraction for version control systems.

SYNOPSIS

Example using Vcs::Svn

  use Vcs::Svn;
  my $vcs = Vcs::Svn->new($project, "repo_url", "commit_db_file", \&_co_hook);

  sub _co_hook {
    my ($vcs, $revision_id, $work_dir) = @_;
    # do some post processing
 }

New Vcs Submodule

The provided default implementations may be overriden to provide specific behavior. In most cases it is sufficient to override the following abstract subroutines to provide a vcs-specific command:

  _checkout_cmd(revision_id, work_dir)

Returns the command to checkout revision_id to the working directory work_dir.

  _apply_cmd(work_dir, patch_file)

Returns the command to apply the patch in file patch_file to the working directory work_dir.

  _diff_cmd(rev1, rev2, path)

Returns the command to compute a diff between two revisions rev1 and rev2. The optional path path is relative to the working directory and used to diff between certain files or directories.

  _get_parent_revisions()

TODO

DESCRIPTION

This module provides a simple abstraction for version control systems.

Available submodules

A Vcs object has to be instantiated with:

commit-db

The commit-db (csv) file has the structure: bug_id,revision_buggy,revision_fixed.

Example for Svn:

  1,1024,1025
  2,1064,1065

Example for Git:

  1,788193a54e0f1aaa428ccfdd3bb45e32c311c18b,c96ae569bbe0167cfa15caa7f784fdb2e1ecdc12
  2,ab333482c629d33d5484b4af6eb27918382ccc28,f77c5101df42f501d96d0363084dcc9c17400fce

Object subroutines

  $vcs->lookup(vid)

Queries the commit database (commit-db) and returns the revision_id for the given version id vid. Format of vid: \d+[bf].

  $vcs->num_revision_pairs()

Returns the number of revision pairs in the commit-db.

  $project->get_bug_ids()

Returns an array of all bug ids in the commit-db.

  $vcs->B<contains_version_id> C<contains_version_id(vid)

Given a valid version id (vid), this subroutine returns true if vid exists in the commit-db and false otherwise. Format of vid: \d+[bf] This subroutine dies if vid is invalid.

  $vcs->checkout_vid(vid, work_dir)

Performs a lookup of vid in the commit-db followed by a checkout of the corresponding revision with revision_id to work_dir. Format of vid: \d+[bf].

Always performs a clean checkout, i.e., the working directory is deleted before the checkout, if it already exists.

  $vcs->diff(revision_id_1, revision_id_2 [, path])

Returns the diff between revision_id_1 and revision_id_2 or undef if the diff failed. The path argument is optional and can be used to compute a diff between certain files or directories. Note that path is relative to the working directory.

  $vcs->export_diff(revision_id_1, revision_id_2, out_file [, path])

Exports the diff between revision_id_1 and revision_id_2 to out_file. The path argument is optional and can be used to compute a diff between certain files or directories. Note that path is relative to the working directory.

  $vcs->apply_patch(work_dir, patch_file)

Applies the patch provided in patch_file to the working directory work_dir.

<<