Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
SVN::Hooks::CheckStrucUser(Contributed Perl DocumSVN::Hooks::CheckStructure(3)

       SVN::Hooks::CheckStructure - Check the structure	of a repository.

       version 1.34

       This SVN::Hooks plugin checks if	the files and directories added	to the
       repository are allowed by its structure definition. If they don't, the
       commit is aborted.

       It's active in the "pre-commit" hook.

       It's configured by the following	directive.

       This directive enables the checking, causing the	commit to abort	if it
       doesn't comply.

       The STRUCT_DEF argument specify the repository strucure with a
       recursive data structure	consisting of one of:

       ARRAY REF
	   An array ref	specifies the contents of a directory. The referenced
	   array must contain a	pair number of elements. Each pair consists of
	   a NAME_DEF and a STRUCT_DEF.	The NAME_DEF specifies the name	of the
	   component contained in the directory	and the	STRUCT_DEF specifies
	   recursively what it must be.

	   The NAME_DEF	specifies a name in one	of these ways:

	       A string	specifies a name directly.

	       A regexp	specifies the class of names that match	it.

	       A number	may be used as an else-clause. A non-zero number means
	       that any	name not yet matched by	the previous pair must conform
	       to the associated STRUCT_DEF.

	       A zero means that no name will do and signals an	error. In this
	       case, if	the STRUCT_DEF is a string it is used as a help
	       message shown to	the user.

	   If no NAME_DEF matches the component	being looked for, then it is a
	   structure violation and the commit fails.

	   A string must be one	of 'FILE' and 'DIR', specifying	what the
	   current component must be.

	   A non-zero number simply tells that whatever	the current component
	   is is ok and	finishes the check successfully.

	   A zero tells	that whatever the current component is is a structure
	   violation and aborts	the commit.

       Now that	we have	this semi-formal definition off	the way, let's try to
       understand it with some examples.

	       my $tag_rx    = qr/^[a-z]+-\d+\.\d+$/; #	e.g. project-1.0
	       my $branch_rx = qr/^[a-z]+-/;   # must start with letters and hifen
	       my $project_struct = [
		   'META.yml'	 => 'FILE',
		   'Makefile.PL' => 'FILE',
		   ChangeLog	 => 'FILE',
		   LICENSE	 => 'FILE',
		   MANIFEST	 => 'FILE',
		   README	 => 'FILE',
		   t =>	[
		       qr/\.t$/	 => 'FILE',
		   lib => 'DIR',

		       trunk =>	$project_struct,
		       branches	=> [
			   $branch_rx => $project_rx,
		       tags => [
			   $tag_rx => $project_rx,

       The structure's first level consists of the three usual directories:
       "trunk",	"tags",	and "branches".	Anything else in this level is denied.

       Below the "trunk" we allow some usual files and two directories only:
       "lib" and "t". Below "trunk/t" we may allow only	test files with	the
       ".t" extension and below	"lib" we allow anything.

       We require that each branch and tag have	the same structure as the
       "trunk",	which is made easier by	the use	of the $project_struct
       variable. Moreover, we impose some restrictions on the names of the
       tags and	the branches.

   check_structure(STRUCT_DEF, PATH)
       SVN::Hooks::CheckStructure exports a function to	allow for the
       verification of path structures outside the context of a	Subversion
       hook. (It would probably	be better to take this function	to its own
       module and use that module here.	We'll take care	of that	eventually.)

       The function check_structure takes two arguments. The first is a
       STRUCT_DEF exactly the same as specified	for the	CHECK_STRUCTURE
       directive above.	The second is a	PATH to	a file which will be checked
       against the STRUCT_DEF.

       The function returns true if the	check succeeds and dies	with a proper
       message otherwise.

       The function is intended	to check paths as they're shown	by the 'svn
       ls' command, i.e., with no leading slashes and with a trailing slash to
       indicate	directories. The leading slash is assumed if it's missing, but
       the trailing slash is needed to indicate	directories.

       Gustavo L. de M.	Chaves <>

       This software is	copyright (c) 2016 by CPqD <>.

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

perl v5.24.1			  2016-11-10	 SVN::Hooks::CheckStructure(3)


Want to link to this manual page? Use this URL:

home | help