Как создать патч, игнорирующий различия в добавлении отступа в коде?

whohas пакет (ссылка) может помочь Вам.

Пример

% whohas pidgin|grep "pidgin "
MacPorts    pidgin                                 2.10.6                                                       https://trac.macports.org/browser/trunk/dports/net/pidgin/Portfile
Slackware   pidgin                                 2.7.11-i486-3sl                    slacky.eu                 
Slackware   pidgin                                 2.7.0-i486-1                       salixos.org               
Slackware   pidgin                                 2.7.0-i486-1                       slackware.com             
OpenBSD     pidgin                                 2.9.0-gtkspell          8.3M                                 
OpenBSD     pidgin                                 2.9.0              8.3M 16-Aug-201                           
Mandriva        pidgin                             2.10.6-0.1.i586                                              http://sophie.zarb.org/rpms/a6ec6cd30f5fa024d14549eea375dba4
Fink        pidgin                                 2.10.6-1                                                     http://pdb.finkproject.org/pdb/package.php/pidgin
FreeBSD     pidgin                                 2.10.6                             net-im                    http://www.freebsd.org/cgi/pds.cgi?ports/net-im/pidgin
FreeBSD     e17-module-everything-pidgin           20111128                           x11-wm                    http://www.freebsd.org/cgi/pds.cgi?ports/x11-wm/e17-module-everything-pidgin
NetBSD      pidgin                                 2.10.6nb5          10M  2012-12-15 chat                      http://pkgsrc.se/chat/pidgin
Ubuntu      pidgin                                 1:2.10.0-0ubuntu2. 695K            oneiric                   http://packages.ubuntu.com/oneiric/pidgin
Ubuntu      indicator-status-provider-pidgin       0.5.0-0ubuntu1     7K              oneiric                   http://packages.ubuntu.com/oneiric/indicator-status-provider-pidgin
Debian      pidgin                                 2.7.3-1+squeeze3   706K            stable                    http://packages.debian.org/squeeze/pidgin
Debian      pidgin                                 2.10.6-2           591K            testing                   http://packages.debian.org/wheezy/pidgin
Debian      indicator-status-provider-pidgin       0.6.0-1            33K             testing                   http://packages.debian.org/wheezy/indicator-status-provider-pidgin
Source Mage funpidgin                              2.5.0                              test                      
Source Mage funpidgin                              2.5.0                              stable                    
Source Mage pidgin                                 2.10.6                             test                      
Source Mage pidgin                                 2.10.5                             stable                    
Gentoo      pidgin                                 2.10.6                                                       http://gentoo-portage.com/net-im/pidgin 
Gentoo      pidgin                                 2.10.4                                                       http://gentoo-portage.com/net-im/pidgin 

7
17.12.2013, 15:52
2 ответа

diff имеет более одной опции, связанной с пробелами. Однако одна из них менее полезна для патчей. Страница руководства дает неясную подсказку, ссылаясь на GNU:

   -B, --ignore-blank-lines
          ignore changes where lines are all blank
   -b, --ignore-space-change
          ignore changes in the amount of white space
   -w, --ignore-all-space
          ignore all white space

и FreeBSD

   -b     Ignore changes in amount of white space.
   -B     Ignore changes that just insert or delete blank lines.
   -w     Ignore white space when comparing lines.

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

$ diff foo.c foo2.c
4c4
<     setlocale(LC_ALL, "");
---
>     setlocale(LC_ALL, " ");
6,7c6,7
<     printw("\U0001F0A1");
<     getch();
---
>     printw ("\U0001F0A1");
>     getch();  /* comment */
$ diff -b foo.c foo2.c
4c4
<     setlocale(LC_ALL, "");
---
>     setlocale(LC_ALL, " ");
6,7c6,7
<     printw("\U0001F0A1");
<     getch();
---
>     printw ("\U0001F0A1");
>     getch();  /* comment */
$ diff -w foo.c foo2.c
7c7
<     getch();
---
>     getch();  /* comment */

В этом случае опция -w позволяет игнорировать изменение параметра setlocale (возможно, не то, что было задумано).

POSIX diff, кстати, имеет только опцию -b.

Для patch, POSIX документирует опцию -l:

-l
(Буква ell.) Вызывает любую последовательность символов в сценарии различения, чтобы соответствовать любой последовательности символов во входном файле. Другие символы должны быть точно сопоставлены.

7
27.01.2020, 20:15

diff имеет опцию проигнорировать пробельные изменения (-w), то же для patch (-l). В целом это - плохая идея проигнорировать пробел, хотя, таким образом, необходимо зарезервировать его использование для особых случаев, когда чей-то редактор сделал что-то ужасное...

8
27.01.2020, 20:15
  • 1
    Спасибо @frontschutz, Таким образом, мой commade был бы теперь разностью-Naur-w b?? –  Ram 17.10.2013, 17:51

Теги

Похожие вопросы