---
name: "Arch::Changeset"
section: "3pm"
platform: "linux"
package: "libarch-perl"
version: "0.5.2-2"
release: "Debian 11 (Bullseye)"
platforms: ["linux"]
url: "https://new.carta.tech/Arch::Changeset"
---

# Arch::Changeset(3pm)

class representing Arch changeset

## NAME

Arch::Changeset - class representing Arch changeset

## SYNOPSIS

**Arch::Changeset** objects may be created directly if you got a changeset directory:

```
    use Arch::Changeset;
    my $changeset = Arch::Changeset->new(
        'migo@homemail.com--Perl-GPL/arch-perl--devel--0--patch-6',
        '/tmp/,,changeset-6',
    );
```

But often are created indirectly by other objects:

```
    use Arch::Session;
    $changeset = Arch::Session->new->get_revision_changeset(
        'migo@homemail.com--Perl-GPL/arch-perl--devel--0--patch-6'
    );
    use Arch::Library;
    $changeset = Arch::Library->new->get_revision_changeset(
        'migo@homemail.com--Perl-GPL/arch-perl--devel--0--patch-6'
    );
    print scalar $changeset->get_patch("perllib/Arch/Changeset.pm");
    my $diff_file = ($changeset->get_patch("README", 1))[2];
    print Arch::Util::load_file($diff_file);
```

## DESCRIPTION

This class represents the changeset concept in Arch and provides some useful methods.

## METHODS

The following methods are available:

**new**, **get\_patch**, **get\_index**, **get\_changes**, **get\_all\_diffs**, **join\_all\_diffs**, **ancestor**.

- **new** *revision-spec* *dir-name*

  Construct the Arch::Changeset object associated with the given fully-qualified *revision-spec* and the existing directory *dir-name*.

- **get\_patch** *file-path*

  - **get\_patch** *file-path* *type*

  - **get\_patch** *file-path* *type* *full-file-asis*

  Return the patch (or otherwise content) of the given *file-path* in the changeset.

  *type* is integer: 0 (unknown, try to autodetect, this is the default), 1 (modified file, or metadata change), 2 (new file), 3 (removed file).

  The default behaviour is to create a fake diff against */dev/null* for non-binary new and removed files; the *full-file-asis* flag, if set to true, changes this behaviour and causes to return the content of such file as-is. Binary new and removed files are always returned as-is regardless of the flag. This flag is also ignored if *type* is 1.

  In the scalar content return the patch in [*diff*(1)](/diff/1.md) format (or the whole file content as described above). In the list content return 4 scalars: the patch, the file name on the disk containing this patch (or the whole file), the change type (that is "patch", "new" or "removed") and the as-is flag.

  The returned values that follow the first one (the patch/file content) share the order of the corresponding parameters; the parameters are more hints, while the returned values accurately describe the content.

- **get\_index** *name*

  Returns the content of the index file *name* as an **ID** =\> **path** hash.

  Valid *name*s are 'orig-dirs-index', 'orig-files-index', 'mod-dirs-index' and 'mod-files-index'.

- **get\_changes**

  Returns a list of changes in the changeset.

- **get\_all\_diffs**

  Returns all diffs in the changeset (array or arrayref). This includes changes of types *MODIFY*, *ADD* and *DELETE*.

- **join\_all\_diffs**

  Returns concatenated output of all diffs in the changeset.

- **ancestor**

  Return the ancestor of the changeset. If *=ancestor* file is found (that is the case for library changesets) its content is returned, otherwise try to guess the ancestor of the revision using **Arch::Util::adjacent\_revision**.

## BUGS

Awaiting for your reports.

## AUTHORS

Mikhael Goikhman (migo@homemail.com--Perl-GPL/arch-perl--devel).

## SEE ALSO

For more information, see tla, Arch::Session, Arch::Library, Arch::Util.
