Re: lug-bg: cvs log date format
- Subject: Re: lug-bg: cvs log date format
- From: George Danchev <danchev@xxxxxxxxx>
- Date: Wed, 1 Sep 2004 14:08:54 +0300
On Tuesday 31 August 2004 10:40, Peter Pentchev wrote:
[snip]
> > revision 1.1
> > date: 2004-08-29 16:17:57 +0000; author: danchev; state: Exp;
> >
> > Мда, последния ред е формата на датата. Та какви видове имаме и как се
> > контролира той от файловете в CVSROOT/
>
> Хмм.. бърз въпрос: cvs --version какво ще покаже?
Concurrent Versions System (CVS) 1.12.9 (client/server)
това е дебианския пакет cvs 1.12.9-4 (4 е версията на пакета, 1.12.9 е
stock/upstream version) . Зипнатата дир след apt-get source cvs
http://danchev.fccf.net/files/debian/badcvs.tar.bz2 (ще се ориентираш;-)
> Върху самия формат на датата така, както излиза в изхода от cvs log,
> нямаш много контрол. Ако разглеждаш stock CVS sources така, както идват
> от cvshome.org, мисля, че нямаш никакъв контрол, поне не и във версия
> 1.11.17. От файла src/log.c, редове около 1611:
>
> sprintf (buf, "%04d/%02d/%02d %02d:%02d:%02d", year, mon, mday,
> hour, min, sec);
> cvs_output (buf, 0);
мда наистина не го бях ровил, въпреки, че е за 5 сек. грепване ;-)
Само, че в 1.11.17 горното е в cvs_output() , а в 1.12.x е в
cvs_output_tagged() ...
cvs_output ("\n", 1);
cvs_output_tagged ("text", "date: ");
(void)sscanf (ver->date, SDATEFORM, &year, &mon, &mday, &hour, &min,
&sec);
if (year < 1900)
year += 1900;
sprintf (buf, "%04d-%02d-%02d %02d:%02d:%02d +0000", year, mon, mday,
hour, min, sec);
cvs_output_tagged ("date", buf);
където наистина се форматира с тирета sprintf(), които аз насляпо замених
с / ... но никакъв резултат ;-) ... Осетих се, че вместо SDATEFORM треа се
използва старото DATEFORM и достигнахме до ;-)
date: 1920/134540069/135111584 135176192:17:-1073744676 +0000; author:
danchev; state: Exp; lines: +0 -0
след което при клиента cvs log:
cvs log: Can't parse date/time: `1920/134540069/135111584
135176192:17:-1073745380 +0000'.
;-) имаме слашове, но треа го видя пак що така форматира, като, че ли излезе
не много тривиално както очаквах... пък и нямам време, но ще го зборя тия
дни.
Освен това имаме и rcs2log скрипт който явно влияе на формата на датата, но
незнам точно кога cvs го вика..., даже в горния дебиан пакет има и пач за
него, да се справя с новия формат... Но и него редактирах да не плюва -,
а / , но не ... - си знае и това е ;-)
> Сега... има друг момент, който може би е точно това, с което се
> сблъскваш. Стандартният CVS може да извежда датата само в
> един-единствен формат - с наклонена черта като разделител между година,
> месец и ден. В това, което ти си paste-нал горе, за разделител се
> използва тире... ти да не би да ползваш FreeBSD, а? :) Защото
> Dag-Erling Smoerdgrav преди известно време добави във FreeBSD-ския CVS
> една опцийка iso8601, която кара сървъра (или клиента, ако работи върху
> локално хранилище) да извежда датите точно така - с тирета между година,
> месец, ден. Дори и да не ползваш FreeBSD, а примерно Debian или някаква
> такава щуротия (:P), провери дали и при теб няма такава някаква опция и
> дали тя пък не е случайно включена - при FreeBSD тази опция се слага във
> файла CVSROOT/options в хранилището.
Точно такова нещо чувствах, че трябва да съществува и при все, че съм виждал
доста cvs repo-та не го знаех и намирах в моите докс... Нямам и
CVSROOT/options, но наистина с подобна опция е правилния начин да се
контролира форматирането на датата, а не твърдо закодиран формат и
насилствено минаване към новия, щото една камара софтуер може да разчита на
стария формат. Според мен FreeBSD port maintainer/commiter-a е добре да
предложи тази промяна в stock/upstream кода на CVS.
> Може би statcvs е "свикнало" да работи със стандартния формат, при който
> разделителят е наклонена черта; ако е така, не би трябвало да бъде много
> трудно пък да го обучиш да работи и с дати, форматирани според ISO 8601,
> но първо провери дали не можеш да убедиш CVS-а си да се държи "нормално"
> (макар че май за мен вече "нормално" е ISO 8601, но знае ли човек...)
Мда видях и Велентин Вълчев също предлага заместник на statcvs с тривиална
поправка, но по-ми харесва да се оправи cvs да контролирам формата на датата
от CVSROOT/options... пък теа жава парсери може да ги опитаме по-късно, и има
кой да ги научи да парсват и двата формата.
Друго бързо решение е да опитам стара версия на cvs 1.11.x debian stable,
която е със sec fixes... или да спретнеме един дебиански пакет със cvs
sources от FreeBSD... или пача за options ако го намеря отделно ще е
най-добре ... Тези дни ще се заема... 10x
--
pub 4096R/0E4BD0AB 2003-03-18 <keyserver.bu.edu ; pgp.mit.edu>
fingerprint 1AE7 7C66 0A26 5BFF DF22 5D55 1C57 0C89 0E4B D0AB
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================
|