Подводные камни автоматического управления версиями файлов? - PullRequest
0 голосов
/ 24 августа 2009

Я работаю над системой управления файлами и хотел бы включить автоматическое управление версиями, такое как нумерация Бейтса , если существует файл с таким именем. Я подумал вставить «-v0001» между именем файла и расширением и подсчитать количество версий по мере их поступления.

$basename = pathinfo($filename, PATHINFO_BASENAME);
$fname = pathinfo($filename, PATHINFO_FILENAME);

 while (filenameExists($basename)) {
     //look for existing -vnnnn (at end of file name)
     if (versioningExists($fname)) {       
         //roll number ahead, set bates number
     } else {
         //start bates numbering at 1    
     }
     //insert bates version number (str_pad)
 }

Я думаю, я бы использовал шаблон регулярных выражений, чтобы проверить, существует ли версия.

Мои вопросы:

  • Каковы потенциальные проблемы использования такой системы нумерации?
  • А какие есть альтернативы для управления версиями файлов?

Я собираюсь сделать так, чтобы это была система массового импорта, поэтому я не хочу сообщать пользователю о том, что мне могут быть предоставлены уникальные имена файлов, и у меня есть возможность включить выбор других схемы управления версиями. В моей системе есть теги, поэтому имя файла имеет меньшее значение, но я думаю, что оно все еще имеет значение.

Ответы [ 2 ]

1 голос
/ 24 августа 2009

В прошлом я всегда просто привязывал результаты mktime () перед расширением файла (когда указанное имя файла уже существует в системе). Не нужно анализировать номер текущей версии, и вы также получите хорошую временную метку, добавленную к имени файла, чтобы вы могли определить, какая из них появилась первой и когда она была создана. Вы можете проверить файл с включенной отметкой времени перед сохранением, если вас беспокоит, что кто-то другой может сохранить файл с таким же именем в ту же самую секунду на сервере. Если это действительно проблема, вы, вероятно, должны сделать то же самое и с вашей системой, набрав номер, затем еще раз проверьте, существует ли файл с таким именем.

Временная метка имеет дополнительное преимущество, так как маловероятно, что кто-то загружает файл с уже названным именем, похожим на номер вашей версии, например, bob_321235678.jpg по сравнению с bob_1.jpg.

Единственным недостатком всего этого является то, что вы можете получить кучу файлов, которые более или менее одинаковы, но с разными именами, поэтому вы можете периодически анализировать эти данные в поисках файлов, которые не используются в системе.

0 голосов
/ 24 августа 2009

Альтернативный подход
Могу ли я предложить исследовать настоящую систему управления версиями в виде subversion как прозрачного бэкэнда? Вы можете использовать svn hooks для автоматизации коммитов и так далее. Может быть, это будет проще и надежнее.

Глава "Автоверсия" по Subversion документ может быть хорошей отправной точкой для этого.

...