1<?php
2//
3// +------------------------------------------------------------------------+
4// | phpDocumentor                                                          |
5// +------------------------------------------------------------------------+
6// | Copyright (c) 2000-2003 Joshua Eichorn, Gregory Beaver                 |
7// | Email         jeichorn@phpdoc.org, cellog@phpdoc.org                   |
8// | Web           http://www.phpdoc.org                                    |
9// | Mirror        http://phpdocu.sourceforge.net/                          |
10// | PEAR          http://pear.php.net/package/PhpDocumentor                |
11// +------------------------------------------------------------------------+
12// | This source file is subject to version 3.00 of the PHP License,        |
13// | that is available at http://www.php.net/license/3_0.txt.               |
14// | If you did not receive a copy of the PHP license and are unable to     |
15// | obtain it through the world-wide-web, please send a note to            |
16// | license@php.net so we can mail you a copy immediately.                 |
17// +------------------------------------------------------------------------+
18//
19/**
20 * CVS file adding iterator
21 *
22 * This file iterates over a directory, and adds everything to CVS that is
23 * found, ignoring any error messages, until all files in each directory
24 * and subdirectory have been added to cvs.  It then commits the files to cvs
25 * @package phpDocumentor
26 * @author Greg Beaver <cellog@php.net>
27 * @copyright Copyright 2003, Greg Beaver
28 * @version 1.0
29 */
30/**#@+
31 * phpDocumentor include files.  If you don't have phpDocumentor, go get it!
32 * Your php life will be changed forever
33 */
34$dir = realpath(dirname(__FILE__).'/..');
35require_once("$dir/phpDocumentor/common.inc.php");
36require_once("$dir/phpDocumentor/Io.inc");
37/**#@-*/
38
39/**
40* Physical location on this computer of the package to parse
41* @global string $cvsadd_directory
42*/
43$cvsadd_directory = realpath('.');
44/**
45* Comma-separated list of files and directories to ignore
46*
47* This uses wildcards * and ? to remove extra files/directories that are
48* not part of the package or release
49* @global string $ignore
50*/
51$ignore = array('CVS/');
52
53/******************************************************************************
54*       Don't change anything below here unless you're adventuresome          *
55*******************************************************************************/
56
57/**
58 * @global Io $files
59 */
60$files = new Io;
61
62$allfiles = $files->dirList($cvsadd_directory);
63/**#@+
64 * Sorting functions for the file list
65 * @param string
66 * @param string
67 */
68function sortfiles($a, $b)
69{
70	return strnatcasecmp($a['file'],$b['file']);
71}
72
73function mystrucsort($a, $b)
74{
75	if (is_numeric($a) && is_string($b)) return 1;
76	if (is_numeric($b) && is_string($a)) return -1;
77	if (is_numeric($a) && is_numeric($b))
78	{
79		if ($a > $b) return 1;
80		if ($a < $b) return -1;
81		if ($a == $b) return 0;
82	}
83	return strnatcasecmp($a,$b);
84}
85/**#@-*/
86
87$struc = array();
88foreach($allfiles as $file)
89{
90	if ($files->checkIgnore(basename($file),dirname($file),$ignore, false))
91    {
92//        print 'Ignoring '.$file."<br>\n";
93        continue;
94    }
95	$path = substr(dirname($file),strlen(str_replace('\\','/',realpath($cvsadd_directory)))+1);
96	if (!$path) $path = '/';
97	$file = basename($file);
98	$ext = array_pop(explode('.',$file));
99	if (strlen($ext) == strlen($file)) $ext = '';
100	$struc[$path][] = array('file' => $file,'ext' => $ext);
101}
102uksort($struc,'strnatcasecmp');
103foreach($struc as $key => $ind)
104{
105	usort($ind,'sortfiles');
106	$struc[$key] = $ind;
107}
108$tempstruc = $struc;
109$struc = array('/' => $tempstruc['/']);
110$bv = 0;
111foreach($tempstruc as $key => $ind)
112{
113	$save = $key;
114	if ($key != '/')
115	{
116        $struc['/'] = setup_dirs($struc['/'], explode('/',$key), $tempstruc[$key]);
117	}
118}
119uksort($struc['/'],'mystrucsort');
120/**
121 * Recursively add files to cvs
122 * @param array the sorted directory structure
123 */
124function addToCVS($struc)
125{
126	foreach($struc as $dir => $files)
127	{
128		if ($dir === '/')
129		{
130            print 'processing '.$dir . "\n";
131			addToCVS($struc[$dir]);
132			return;
133		} else
134		{
135			if (!isset($files['file']))
136			{
137                print 'adding '.$dir . "\n";
138                system('cvs add '.$dir);
139                chdir($dir);
140				addToCVS($files);
141                chdir('..');
142			} else
143			{
144                print 'adding '.$files['file'] . "\n";
145                system('cvs add '.$files['file']);
146                system('cvs commit -m "" '.$files['file']);
147			}
148		}
149	}
150}
151addToCVS($struc);
152print "\n".'done';
153?>