Mercurial, проблемы с папками

Как известно, система контроля версий mercurial пустые папки не помещает в репозиторий. Один из выходов из положения — создать в пустых папках файл .hidden.Конечно это нужно как-то автоматизировать. Вот пример скрипта на php:
#! /usr/bin/env php
<?php
make(dirname(__FILE__).DIRECTORY_SEPARATOR);
function make($path)
{
    $h = opendir($path);
    while (FALSE !== ($element = readdir($h)))
    {
        $path_in = $path.$element;
        if ($element == '.' or $element == '..' or !is_dir($path_in))
        {
            continue;
        }        
        if(count(scandir($path_in)) == 2)//если папка пуста
        {
            echo 'Adding: '.$path_in.DIRECTORY_SEPARATOR.'.hidden'."\n";
            fopen($path_in.DIRECTORY_SEPARATOR.'.hidden', 'w');
        }
        else
        {
            make($path_in.DIRECTORY_SEPARATOR);
        }
    }
    closedir($h);
}
?>

Ложем файлик в корень проекта и запускаем.
UP: Часть2, Часть3
  • 0
  • 25 сентября 2009, 12:46
  • admin

Комментарии (6)

RSS свернуть / развернуть
+
0
аналог через SPL, как то чуток покороче выглядит
#!/usr/bin/env php
<?php

$dir_iterator = new RecursiveDirectoryIterator(".");
$iterator = new RecursiveIteratorIterator($dir_iterator,
RecursiveIteratorIterator::SELF_FIRST);

foreach ($iterator as $file) {
  if ($file->isDir() AND $file->getSize() == 48 AND $file->getPath()!='./.hg'){
      echo 'Adding: '.$file.DIRECTORY_SEPARATOR.'.hidden'."\n";
      fopen($file.DIRECTORY_SEPARATOR.'.hidden', 'w');
  }
}
avatar

sergk

  • 26 сентября 2009, 00:20
+
0
Да так покороче, только вот я непонял для чего нам класс RecursiveIteratorIterator, если у класса RecursiveDirectoryIterator есть метод next(). Иными словами просто в конце цикла делаем $dir_iterator->next(). Или я чего то недопонял?
avatar

admin

  • 26 сентября 2009, 11:26
+
0
$file->getSize() == 48 — это тоже недопонял. А если папка назывется в utf-8(rus). Или это уже в файлстриме...?
avatar

admin

  • 26 сентября 2009, 11:29
комментарий был удален

комментарий был удален

комментарий был удален


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.