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

# Arch::Changes(3pm)

class representing a list of changes

## NAME

Arch::Changes - class representing a list of changes

## SYNOPSIS

```
    use Arch::Changes qw(:type);
    use Arch::Tree;
    my $changes = $tree->get_changes;
    print $changes->get_listing;
    use Arch::Log;
    my $changed = $log->get_changes->is_changed('to', "COPYING");
    die "License was compromised" if $changed && $changed->{&MODIFY};
```

## DESCRIPTION

Arch::Changes contains a list of elements, each representing a single tree change. Each change element is described by a hash with the following fields:

- **type**

  The type of the change. Can be one of **ADD**, **DELETE**, **MODIFY**, **META\_MODIFY** or **RENAME**.

- **is\_dir**

  A boolean value indicating whether the affected tree element is a directory.

- **arguments**

  A list of arguments. The first element is always relative path of the affected tree element. For changes of type **RENAME** the first argument is the old path and the second argument the new path name.

The type constants can be conveniently imported using the tag `":type"`.

```
    use Arch::Changes qw(:type);
```

## METHODS

The following methods are available:

**new**, **add**, **count**, **get**, **get\_listing**, **is\_changed**, **dump**, **type\_string**, **to\_string**.

- **new**

  Creates a new, initially empty, changes list.

  Typically it is called indirectly from method **get\_changes** in Arch::Changeset, Arch::Tree or Arch::Log class.

- **add** *type* *is\_dir* *arguments...*

  Adds a new change element to the list of changes.

  Typically it is called indirectly from method **get\_changes** in Arch::Changeset, Arch::Tree or Arch::Log class.

- **count**

  Returns the number of change elements.

- **get** *num*

  Returns the *num*-th change element or all if *num* is undefined.

- **get\_listing**

  Generates a textual changes listing as produced by `"tla changes"`.

- **is\_changed** *to* *filepath* \[*is\_dir*\]

  Verify whether the given *filepath* is modified by the changes. The *to* parameter may get boolean values "0", "1", "from" or "to", it only affects **RENAME** changes, and in some sense **ADD** and **DELETE** changes. If *to* is set, then the given *filepath* is taken as the destination of **RENAME** or **ADD**, otherwise as the source of **RENAME** or **DELETE**. The **MODIFY** and **META\_MODIFY** changes are not affected, since the destination and the source is the same file/dir.

  If *filepath* is not modified by any changes, return undef.

  Otherwise, return hash with possible keys **ADD**, **DELETE**, **MODIFY**, **META\_MODIFY** and **RENAME**. The hash values are 1 in all cases except for **RENAME**, then the value is the file name on the opposite side (i.e., the source of **RENAME** if *to* is true, and the destination if false).

  Note, the valid return values for arch are: undef, hashref with one key (**ADD** or **DELETE**) or hashref with combination of one-to-three keys (**MODIFY**, **META\_MODIFY** and **RENAME**).

- **dump**

  Generates a dump of the changes list using Data::Dumper.

- **type\_string** *change*

  Returns the change type string as produced by `"tla changes"`.

- **to\_string** *change*

  Generates a changes line for *change* as produced by `"tla changes"`.

## BUGS

Awaiting for your reports.

## AUTHORS

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

Enno Cramer (uebergeek@web.de--2003/arch-perl--devel).

## SEE ALSO

For more information, see tla, Arch::Changeset, Arch::Tree, Arch::Log.
