Annotation of embedaddon/php/win32/build/svnclean.js, revision 1.1.1.1

1.1       misho       1: /*
                      2:   +----------------------------------------------------------------------+
                      3:   | PHP Version 5                                                        |
                      4:   +----------------------------------------------------------------------+
                      5:   | Copyright (c) 1997-2009 The PHP Group                                |
                      6:   +----------------------------------------------------------------------+
                      7:   | This source file is subject to version 3.01 of the PHP license,      |
                      8:   | that is bundled with this package in the file LICENSE, and is        |
                      9:   | available through the world-wide-web at the following url:           |
                     10:   | http://www.php.net/license/3_01.txt                                  |
                     11:   | If you did not receive a copy of the PHP license and are unable to   |
                     12:   | obtain it through the world-wide-web, please send a note to          |
                     13:   | license@php.net so we can mail you a copy immediately.               |
                     14:   +----------------------------------------------------------------------+
                     15:   | Author: Wez Furlong <wez@thebrainroom.com>                           |
                     16:   |         Pierre A. Joye <pierre@php.net>                              |
                     17:   +----------------------------------------------------------------------+
                     18: */
                     19: 
                     20: /* $Id$ */
                     21: // Cleans up files that do not belong in the repository
                     22: 
                     23: var FSO = WScript.CreateObject("Scripting.FileSystemObject");
                     24: var WshShell = WScript.CreateObject("WScript.Shell");
                     25: var STDOUT = WScript.StdOut;
                     26: 
                     27: /* svn propget svn:ignore dirname */
                     28: function find_ignore(dirname)
                     29: {
                     30:        dirname = "" + dirname;
                     31:        dirname_len = dirname.length;
                     32: 
                     33:        if (!FSO.FolderExists(dirname) || (dirname_len >= 4 && 
                     34:        dirname.substring(dirname_len - 4) == ".svn")) {
                     35:                return;
                     36:        }
                     37: 
                     38:        var f = FSO.GetFolder(dirname);
                     39:        var fc = new Enumerator(f.SubFolders);
                     40: 
                     41:        for (; !fc.atEnd(); fc.moveNext()) {
                     42:                find_ignore(fc.item());
                     43:        }
                     44: 
                     45:        kill_from_ignore(dirname);
                     46: }
                     47: 
                     48: /* recursive remove using ignore props style wildcard matching;
                     49:  * note that FSO.DeleteFolder and FSO.DeleteFile methods both
                     50:  * accept wildcards, but that they are dangerous to use eg:
                     51:  * "*.php" will match "*.phpt" */
                     52: function rm_r(filename)
                     53: {
                     54:        if (FSO.FolderExists(filename)) {
                     55:                var fc = new Enumerator(FSO.GetFolder(filename).SubFolders);
                     56: 
                     57:                for (; !fc.atEnd(); fc.moveNext()) {
                     58:                        rm_r(fc.item());
                     59:                }
                     60: 
                     61:                fc = new Enumerator(FSO.GetFolder(filename).Files);
                     62: 
                     63:                for (; !fc.atEnd(); fc.moveNext()) {
                     64:                        FSO.DeleteFile(fc.item(), true);
                     65:                }
                     66: 
                     67:                FSO.DeleteFolder(filename, true);
                     68:        } else if (FSO.FileExists(filename)) {
                     69:                FSO.DeleteFile(filename, true);
                     70:        } else {
                     71:                /* we need to handle wildcards here */
                     72:                var foldername = FSO.GetParentFolderName(filename);
                     73: 
                     74:                if (foldername == "")
                     75:                        foldername = ".";
                     76: 
                     77:                var filename = FSO.GetFileName(filename);
                     78: 
                     79:                var retext = filename.replace(/\./g, '\\.');
                     80:                retext = '^' + retext.replace(/\*/g, '.*') + "$";
                     81:                var re = new RegExp(retext);
                     82: 
                     83:                var folder = FSO.GetFolder(foldername);
                     84:                var fc = new Enumerator(folder.SubFolders);
                     85:                for (; !fc.atEnd(); fc.moveNext()) {
                     86: 
                     87:                        var item = FSO.GetFileName(fc.item());
                     88: 
                     89:                        if (item.match(re)) {
                     90:                                rm_r(fc.item());
                     91:                        }
                     92:                }
                     93:                var fc = new Enumerator(folder.Files);
                     94:                for (; !fc.atEnd(); fc.moveNext()) {
                     95:                        item = FSO.GetFileName(fc.item());
                     96: 
                     97:                        if (item.match(re)) {
                     98:                                FSO.DeleteFile(fc.item(), true);
                     99:                        }
                    100:                }
                    101:        }
                    102: }
                    103: 
                    104: function kill_from_ignore(dirname)
                    105: {
                    106:        var l;
                    107:        var e = WshShell.Exec("svn propget svn:ignore " + dirname);
                    108:        var re = /^(config\.nice.*)|(\*)$/i;
                    109: 
                    110:        while (!e.StdOut.atEndOfStream) {
                    111:                l = e.StdOut.ReadLine();
                    112:                if (l.length == 0 || re.test(l)) {
                    113:                        continue;
                    114:                }
                    115:                rm_r(dirname + l);
                    116:        }
                    117: 
                    118: }
                    119: 
                    120: find_ignore(".");

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>