Russian Qt Forum

Программирование => Общий => Тема начата: ammaximus от Июнь 05, 2013, 10:33



Название: SVN даты
Отправлено: ammaximus от Июнь 05, 2013, 10:33
Добрый день!
Я работаю на крайне консервативном предприятии, где для отслеживания версии файлов используется атрибут дата правки (Linux). Но тут есть проблема - любое копирование по сети устанавливает текущую дату в это поле.
Я начал пытаться внедрять svn, это было достаточно трудно, но сейчас все зависит от того, будут ли сохраняться эти даты правки при update. Причем не просто даты, когда была фиксация, а те, которые были у человека которые комитил во время фиксации XD.
Насколько плохи мои дела? В инете таких проблем не нашел, поскольку есть очевидное решение - использовать для контроля изменений svn журнал и номера ревизий, но у меня так. Посоветуйте что можно сделать.


Название: Re: SVN даты
Отправлено: mutineer от Июнь 05, 2013, 10:50
Дата коммита хранится в svn. Если при выполнении update файл изменяется, то дата его правки меняется на текущую, так как на диске он изменился во время update


Название: Re: SVN даты
Отправлено: ammaximus от Июнь 05, 2013, 12:02
можно ли хотя бы дату комита подсовывать как то?


Название: Re: SVN даты
Отправлено: mutineer от Июнь 05, 2013, 12:14
Куда подсовывать? Файлу? Ну скрипт можно попробовать написать


Название: Re: SVN даты
Отправлено: kamre от Июнь 05, 2013, 14:52
можно ли хотя бы дату комита подсовывать как то?
Отсюда (http://stackoverflow.com/questions/2171939/how-can-i-keep-the-original-file-timestamp-on-subversion):
Цитировать
You can set it in .subversion/config:
[miscellany]
use-commit-times = yes

Although you will have strange side effects if we are talking about source files.

For example, you build your software and do svn update. Now the timestamp of the updated files is older than the timestamp of the build result file, and it won't be rebuilt even though some source files changed. Be very careful with this setting.


Название: Re: SVN даты
Отправлено: panAlexey от Июнь 05, 2013, 23:26
а не подскажете многоуважаемые, как сделать что-бы при комите в файл прописывались даты и версия?
типа:
'Версия: $Revision: 1.11 $
или
'SQLIntellisence
'
'Версия: $Revision: 1.13 $


Название: Re: SVN даты
Отправлено: mutineer от Июнь 05, 2013, 23:56
http://www.linux.org.ru/forum/admin/7927341?cid=7941162


Название: Re: SVN даты
Отправлено: ammaximus от Июль 22, 2013, 13:38
Я решил использовать для решения проблемы properties subversion и скриптов на уровне клиента.
Алгоритм такой:

pre-commit-hook

Код:
foreach (файл){
файл.propreties.date = файл.свойстваwindows.датаизменения
}

post-update-hook
Код:
foreach (файл){
файл.свойстваwindows.датаизменения = файл.propreties.date
}

1. Какой наипростейший способ реализации этих скриптов? Мне в голову приходит Qt, класс QFileInfo должен помочь, но может ли он устанавливать свойства?
2. Как установить svn:property файла из программы? Это ж надо будет наследовать какой-нибудь SVN API, что уже не тривиальная задача.


Название: Re: SVN даты
Отправлено: ammaximus от Июль 22, 2013, 14:10
Так вроде сообразил сам - свойства устанавливаются вызовами
Код:
svn propset/propget name file

Из Qt - это будет системный вызов, в шелле просто.

Непонятно только одно - как программно изменить атрибуты файла


Название: Re: SVN даты
Отправлено: ammaximus от Июль 22, 2013, 14:44
в линукс есть функция touch


Название: Re: SVN даты
Отправлено: ammaximus от Июль 22, 2013, 14:57
Последняя проблема: как программно в шелл скрипте получить дату изменения файла (атрибут)


Название: Re: SVN даты
Отправлено: ammaximus от Июль 22, 2013, 15:53
Вообщем наваял следующее:
svn precommit hook

Код:
#! /usr/bin/sh
file = ?
date=`stat -c %y $file`
svn propset chdate $date $file
svn postupdate hook

Код:
#! /usr/bin/sh
file = ?
svn propget chdate $file
touch -acm -d $date $file

Проблемы:
1. Чему равен file, как его получить. Как получить файл для всех файлов текущего каталога и подкаталогов (рекурсия), а также понять что они под контролем и не лежат в папке .svn
2. Может можно просто как-то получить список коммит-упдэйт файлов, тогда все проще.


Название: Re: SVN даты
Отправлено: ammaximus от Июль 23, 2013, 17:54
Короче все закончилось perl скриптом с парсингом стандартного вывода