Configuration
=============

The configuration of the @PLUGIN@ plugin is done in the `gerrit.config`
file.

```
  [plugin "@PLUGIN@"]
    allowDeletionOfReposWithTags = true

```

plugin.@PLUGIN@.allowDeletionOfReposWithTags
:	Whether repositories that contain tags can be deleted.

	In some organizations repositories that contain tags must not be
	deleted due to legal reasons. This is the case when tags are used
	to mark releases which are shipped to customers and hence the
	source code must be kept to ensure build reproducibility of the
	releases.

	By default true.

plugin.@PLUGIN@.hideProjectOnPreserve
:	Whether projects should be hidden when the preserve option is used
	for the deletion.

	Hiding the project means that the project state is set to `HIDDEN`,
	all access rights are removed and the project is reparented to the
	project defined by [parentForDeletedProjects](#parentForDeletedProjects).
	This parent project is automatically created under the root project
	when it does not exist yet.

	By default false.

plugin.@PLUGIN@.parentForDeletedProjects
:	The name of the project that is used as parent for all deleted
	projects that were preserved by hiding them.

	This project is only used when [hideProjectOnPreserve](#hideProjectOnPreserve)
	is set to true.

	By default `Deleted-Projects`.

plugin.@PLUGIN@.protectedProject
:	The name of a project that is protected against deletion. May be an exact
	name or a regular expression.

	May be specified more than once to specify multiple project names or
	patterns.

	By default not set.


plugin.@PLUGIN@.archiveDeletedRepos
:	Whether to archive repositories instead of deleting them.

	Archiving the git repository means that the repository is stored
	in a folder which is not visible to the users which, from the user
	perspective, is equivalent to the repository being deleted. The
	advantage is, archived repositories can be later recovered if, needed,
	just by moving them back to their former name and location.
	The target folder used to archive the repositories can be set by
	[archiveFolder](#archiveFolder). Archived repositories are moved
	under the [archiveFolder](#archiveFolder) and renamed to add a
	timestamp and the %archived% suffix to the original name.
	Archived repositories are kept in the archive for a time period which
	can be set by [deleteArchivedReposAfter](#deleteArchivedReposAfter).

	If this option is enabled, the project will not be deleted but rather
	renamed and moved into the archive folder.

	If the repository has been archived for a time period longer than
	[deleteArchivedReposAfter](#deleteArchivedReposAfter), it will be
	deleted from the archive by a periodic task which runs once a day.

	By default false.

plugin.@PLUGIN@.archiveFolder
:	The absolute path of the archive folder to store archived repositories.

	The git repository is archived to this target folder only if
	[archiveDeletedRepos](#archiveDeletedRepos) is set to true.

	By default `$site_path/data/delete-project`.

plugin.@PLUGIN@.deleteArchivedReposAfter
:	The time duration for the git repository to be archived.

	The following suffixes are supported to define the time unit:\n
		1. d, day, days\n
		2. w, week, weeks (1 week is treated as 7 days)\n
		3. mon, month, months (1 month is treated as 30 days)\n
		4. y, year, years (1 year is treated as 365 days)\n

	If not specified, the default time unit is in days.

	The project git repository is archived to this target folder only if
	[archiveDeletedRepos](#archiveDeletedRepos) is set to true.

	If [archiveDeletedRepos](#archiveDeletedRepos) is set to true but this
	option is set to zero, the periodic task will not be executed and the
	archived repositories need to be deleted manually or using an external
	task.

	By default 180 (days).
