++ed by:

1 non-PAUSE user.

David Caldwell
and 1 contributors


Darcs::Inventory::Patch - Object interface to patches read from the darcs inventory file


    use Darcs::Inventory;
    $i = Darcs::Inventory->new("darcs_repo_dir");
    for ($i->patches) {
        print $_->date, "\n";         # eg: 1193248123
        print $_->darcs_date, "\n";   # eg: 'Wed Oct 24 10:48:43 PDT 2007'
        print $_->raw_date, "\n";     # eg: '20071024174843'
        print $_->author, "\n";       # eg: 'David Caldwell <david@porkrind.org>'
        print $_->undo, "\n";         # a boolean
        print $_->name, "\n";         # First line of recorded message
        print $_->long, "\n";         # Rest of recorded message (including newlines)
        print $_->hash, "\n";         # eg: '20071024174843-c490e-9dab450fd814405d8391c2cff7a4bce33c6a8234.gz'
        print $_->file, "\n";         # eg: '0000001672-d672e8c18c22cbd4cc8e65fe80a39e68384133083b0f623ae5d57cc563e5630b'
                                      # (Usually found in "_darcs/patches/")
        print $_->raw, "\n";          # The unparsed lines from the inventory for this patch
        print $_->as_string, \n";     # The friendly darcs output (like in `darcs changes')
        print "$_\n";                 # Same as above.
        print $_->diff, \n";          # Runs `darcs' to compute the universal diff of the patch.
        print $_->diffstat, \n";      # Runs `diffstat' on $_->diff output.

    # Or, if you want to do it by hand for some reason:
    use Darcs::Inventory::Patch;
    @raw = Darcs::Inventory::read("darcs_repo_dir/_darcs/inventory");
    $patch = Darcs::Inventory::Patch->new($raw[0]);


Darcs::Inventory::Patch is an object oriented interface to darcs inventory patches.



This parses the lines from a darcs inventory file of patch and returns an object to use for querying.

You probably don't want to use this function directly. Instead, use Darcs::Inventory->new or Darcs::Inventory->load to parse the whole inventory.


This returns the time of the patch in "integer seconds since the epoch" format (GMT timezone). For instance: 1193248123.


The date from the inventory file (as a string). It will look something like this: "20071024174843".


The date in darcs format as a string. It will look something like this: "Wed Oct 24 10:48:43 PDT 2007"


The author string.


This is true if it is an inverted (or undo) patch created by old versions of "darcs rollback". The newer darcs' rollback command works differently and doesn't set this bit any more.


This returns the first line of the record comment as a string (with no newline).


This contains the long part of the record comment (lines 2 and on) as a string (with no newline on the last line).


This is a the hash of the patch. You can use this in darcs' --match option:

  darcs diff --match="hash $hash"

This is the filename of the patch. This is where the actual patch contents go. It is usually found in _darcs/patches/$file.


This is the unparsed patch lines from the inventory file.


This returns the patch in friendly darcs text form, a la `darcs changes'.


Stringifying the patch will also give you the same results of $patch->as_string.


This returns the universal diff of a patch. This is implented by running "darcs diff -u --match "hash $patch->hash" and collecting the output.


This returns the diffstat of a patch. This requires the external program "diffstat" as it is implemented by running diffstat with the output of $patch->diff.




This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Copyright (C) 2007-2012 David Caldwell


David Caldwell <david@porkrind.org>