Отслеживание изменений

Теперь вы, возможно, захотите узнать, какие именно изменения  внес другой разработчик в файл `httpc.c'. Чтобы увидеть журнальные записи для  данного файла, можно использовать команду cvs log:

$ cvs log httpc.c

RCS file: /usr/src/master/httpc/httpc.c,v

Working file: httpc.c

head: 1.8

branch:

locks: strict

access list:

symbolic names:

keyword substitution: kv

total revisions: 8; selected revisions: 8

description:

The one and only source file for trivial HTTP client

----------------------------

revision 1.8

date: 1996/10/31 20:11:14; author: jimb; state: Exp; lines: +1 -1

(tcp_connection): Cast address stucture when calling connect.

----------------------------

revision 1.7

date: 1996/10/31 19:18:45; author: fred; state: Exp; lines: +6 -2

(match_header): Make this test case-insensitive.

----------------------------

revision 1.6

date: 1996/10/31 19:15:23; author: jimb; state: Exp; lines: +2 -6

...

$

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

`revision 1.8'

Каждая версия файла имеет уникальный "номер редакции". Номера ревизии  выглядят как `1.1', `1.2', `1.3.2.2' или даже `1.3.2.2.4.5'. По умолчанию номер

1.1 -- это первая редакция файла. Каждое следующее редактирование увеличивает

последнюю цифру на единицу.

`date: 1996/10/31 20:11:14; author: jimb;...'

В этой строке находится дата изменения и имя пользователя, зафиксировавшего

это изменение; остаток строки не очень интересен.

`(tcp_connection: Cast...'

Это, очевидно, описание изменения.

Команда cvs log может выбирать журнальные записи по дате или по номеру  редакции; за описанием деталей обращайтесь к руководству.

Если вы хотите взглянуть на соответствующее изменение, то  можете использовать команду cvs diff. Например, если вы хотите увидеть, какие  изменения Фред зафиксировал в качестве редакции 1.7, используйте такую команду:

$ cvs diff -c -r 1.6 -r 1.7 httpc.c

Перед рассмотрением того, что нам выдала эта команда, опишем, что означает  каждая ее часть.

 -c Задает использование удобочитаемого формата выдачи изменений. (Интересно, почему это не так по умолчанию). (1)
-r 1.6 -r 1.7 Указывает CVS, что необходимо выдать изменения, необходимые, чтобы превратить редакцию 1.6 в редакцию 1.7. Вы можете запросить более широкий диапазон изменений; например, -r 1.6 -r 1.8 отобразит изменение, сделанные Фредом, и изменения, сделанные вами чуть позже. (Вы также можете заказать выдачу изменений в обратном порядке -- как будто бы они были отменены -- указав номера редакций в обратном порядке: -r 1.7 -r 1.6. Это звучит странно, но иногда полезно.)
httpc.c Имя файла для обработки. Если вы не укажете его, CVS выдаст отчет обо всем каталоге.

Вот что выдаст эта команда:

Index: httpc.c

=================================================================

RCS file: /u/src/master/httpc/httcp.c,v

retrieving revision 1.6

retrieving revision 1.7

diff -c -r1.6 -r1.7

*** httpc.c 1996/10/31 19:15:23 1.6

--- httpc.c 1996/10/31 19:18:45 1.7

***************

*** 62,68 ****

}

! /* Return non-zero iff HEADER is a prefix of TEXT. HEADER should be

null-terminated; LEN is the length of TEXT. */

static int

match_header (char *header, char *text, size_t len)

--- 62,69 ----

}

! /* Return non-zero iff HEADER is a prefix of TEXT, ignoring

! differences in case. HEADER should be lower-case, and

null-terminated; LEN is the length of TEXT. */

static int

match_header (char *header, char *text, size_t len)

***************

*** 76,81 ****

--- 77,84 ----

for (i = 0; i < header_len; i++)

{

char t = text[i];

+ if ('A' <= t && t <= 'Z')

+ t += 'a' - 'A';

if (header[i]!= t)

return 0;

}

$

Требуются некоторые усилия, чтобы привыкнуть к такой подаче информации, но  это определенно стоит того.(2)

Интересная часть информации начинается с первых двух строк,  начинающихся с *** и ---; они описывают старый и новый файлы, подлежащие  сравнению. Остальное состоит из двух "ломтей" (hunk), каждый из которых  начинается со строки из звездочек. Вот первый "ломоть":

***************

*** 62,68 ****

}

! /* Return non-zero iff HEADER is a prefix of TEXT. HEADER should be

null-terminated; LEN is the length of TEXT. */

static int

match_header (char *header, char *text, size_t len)

--- 62,69 ----

}

! /* Return non-zero iff HEADER is a prefix of TEXT, ignoring

! differences in case. HEADER should be lower-case, and

null-terminated; LEN is the length of TEXT. */

static int

match_header (char *header, char *text, size_t len)

Текст из более старой редакции находится после строки *** 62,68

***; текст новой редакции находится после строки --- 62,69 ---. Пара цифр

означает показанный промежуток строк. CVS показывает контекст вокруг изменений и

отмечает измененные строки символами `!'. Таким образом вы видите, что одна

строка из верхней половины была заменена на две строки из нижней.

Вот второй "ломоть":

***************

*** 76,81 ****

--- 77,84 ----

for (i = 0; i < header_len; i++)

{

char t = text[i];

+ if ('A' <= t && t <= 'Z')

+ t += 'a' - 'A';

if (header[i]!= t)

return 0;

}

Здесь описывается добавление двух строк, что обозначается  символами `+'. CVS не выводит старый текст -- это было бы избыточно. Для  описания удаленных строк используется подобный формат.  Как и выход команды diff, выход команды cvs diff обычно  называется "заплатой" (patch), потому что разработчики традиционно использовали  этот формат для распространения исправлений и небольших новый возможностей.  Достаточно читабельна, заплата содержит достаточно информации, чтобы применить  изменения, которые она содержит, к текстовому файлу. В действительности, команда  patch в среде UNIX делает с заплатами именно это.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: