Форум программистов, компьютерный форум, киберфорум
Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159

Команда patch не принимает один hunk

31.01.2024, 13:10. Показов 1885. Ответов 9

Студворк — интернет-сервис помощи студентам
В продолжении предыдущей моей темы "diff, patch и версии библиотеки". Пытаюсь вставить изменения в новую версию библиотеки, исходная библиотека в папке А_1, правленная мной в А_1.1, новая версия библиотеки в папке А_2. Командой diff создаю файл различий между А_1 и А_1.1, командой patch пытаюсь вставить эти различия в новую библиотеку, папка А_2. Два hunk-а вставились успешно, а один, первый отвергнут, самый простой. Почему понять не могу. Пытался ставить fuzz с разными значениями, не помогает. Помогите разобраться в моей проблеме.
В приложении всё что удалась наработать.
Вложения
Тип файла: zip TestDiffPatch.zip (9.0 Кб, 4 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.01.2024, 13:10
Ответы с готовыми решениями:

Что нужно установить, чтобы работала команда patch в терминале?
Чтобы работала команда patch в терминале? Добавлено через 2 минуты Я имею ввиду под Centos 7...

BAT запустить patch.exe | ждать выполнения | удалить patch.exe
Доброй ночи всем читателям форума Первый раз работаю с BAT Я создал sfx архив по завершению распаковки запускается батник (который...

Игра принимает один геймпад за два
Здравствуйте, такая проблема, когда создаю локал мультиплеер и нажимаю падом любую кнопку, то вместо подключения одного персонажа,...

9
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
01.02.2024, 04:37
Команда diff сохраняет несколько общих строк для обеих версий до и после измененного участка. А команда patch ищет именно эти не измененные строки для определения места, куда внести правки.

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

Короче, diff/patch ни с какими параметрами не могут гарантировать успешное наложение всех правок при сильных изменениях.

Иногда помогает инкрементальный подход: если патч создан на базе версии 1, а нужно наложить его на версию 5, то можно попробовать последовательно накладывать его на версии 2, 3, 4, каждый раз после успешного патчинга формируя новый патч, более близкий к конечной версии.

Но рано или поздно все равно придется разбираться в коде и вносить правки руками.
0
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
01.02.2024, 11:21  [ТС]
Это я понимаю, немного разобрался. Но в моём случае, как я понимаю, всё просто, изменение стоит на третьей строке, patch просматривает файл от начала (@@ -1..) до 12 строки для файла исходника и от 1 строки до 13 строки для целевого файла. Я правильно понимаю документацию? В любом случае изменение попадает в этот диапазон
Code
1
2
3
4
5
6
7
@@ -1,12 +1,13 @@
 #include <algorithm>
 #include <array>
+#include <math>
 #include <iostream>
 #include <functional>
 #include <iterator>
И я не против немного ручками поработать.
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
01.02.2024, 16:22
Тут сразу две проблемы.
В версии 2 функция check_pass() все портит, потому что она оттесняет нижний якорь.
А сам нижний якорь тоже изменился (удалены лидирующие пробелы) и не может быть найден.
0
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
01.02.2024, 18:10  [ТС]
Вывод, правлю автоматом с теми установками, которые у меня есть, а далее работаю ручками по тем замечаниям что в rej файлах.
0
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
07.02.2024, 11:48  [ТС]
Ещё вопрос. Как из выходного файла убрать не значащую информацию? Для некоторых файлов выводит так, что весь файл убирает и потом весь файл добавляет, а по факту различий нет.
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
07.02.2024, 18:32
Oleg_IT, как-то сомнительно. Покажите файлы, что ли...
0
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
08.02.2024, 08:36  [ТС]
Например, и такого много. Выбрал другой формат для себя, что бы легче работать с ним было.
Оттестировал отдельно эти файлы, Report.txt пустой, но когда файлы внутри библиотеки вместе с другими получается такое.
Qt-шный diff различий не нашёл.

diff -ul -r Source/ Paraview_5.9.1/ > Report.txt
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
2024-02-08 08:11 diff -ul -r Source/Clients/Catalyst/CAdaptorAPI.cxx Paraview_5.9.1/Clients/Catalyst/CAdaptorAPI.cxx Page 1
 
 
--- Source/Clients/Catalyst/CAdaptorAPI.cxx 2023-12-27 11:23:21.000000000 +0300
+++ Paraview_5.9.1/Clients/Catalyst/CAdaptorAPI.cxx 2023-03-19 15:55:10.000000000 +0300
@@ -1,51 +1,51 @@
-/*=========================================================================
-
-  Program:   ParaView
-  Module:    CAdaptorAPI.cxx
-
-  Copyright (c) Kitware, Inc.
-  All rights reserved.
-  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notice for more information.
-
-=========================================================================*/
-#include "CAdaptorAPI.h"
-
-#include "vtkCPAdaptorAPI.h"
-
-// call at the start of the simulation
-void coprocessorinitialize()
-{
-  vtkCPAdaptorAPI::CoProcessorInitialize();
-}
-
-// call at the end of the simulation
-void coprocessorfinalize()
-{
-  vtkCPAdaptorAPI::CoProcessorFinalize();
-}
-
-// this is the function that determines whether or not there
-// is anything to coprocess this time step
-void requestdatadescription(int* timeStep, double* time, int* coprocessThisTimeStep)
-{
-  vtkCPAdaptorAPI::RequestDataDescription(timeStep, time, coprocessThisTimeStep);
-}
-
-// this function sets needgrid to 1 if it does not have a copy of the grid
-// it sets needgrid to 0 if it does have a copy of the grid but does not
-// check if the grid is modified or needs to be updated
-void needtocreategrid(int* needGrid)
-{
-  vtkCPAdaptorAPI::NeedToCreateGrid(needGrid);
-}
-
-// do the actual coprocessing.  it is assumed that the vtkCPDataDescription
-// has been filled in elsewhere.
-void coprocess()
-{
-  vtkCPAdaptorAPI::CoProcess();
-}
+/*=========================================================================
+
 
 
 
 
 
 
 
2024-02-08 08:11 diff -ul -r Source/Clients/Catalyst/CAdaptorAPI.cxx Paraview_5.9.1/Clients/Catalyst/CAdaptorAPI.cxx Page 2
 
 
+  Program:   ParaView
+  Module:    CAdaptorAPI.cxx
+
+  Copyright (c) Kitware, Inc.
+  All rights reserved.
+  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notice for more information.
+
+=========================================================================*/
+#include "CAdaptorAPI.h"
+
+#include "vtkCPAdaptorAPI.h"
+
+// call at the start of the simulation
+void coprocessorinitialize()
+{
+  vtkCPAdaptorAPI::CoProcessorInitialize();
+}
+
+// call at the end of the simulation
+void coprocessorfinalize()
+{
+  vtkCPAdaptorAPI::CoProcessorFinalize();
+}
+
+// this is the function that determines whether or not there
+// is anything to coprocess this time step
+void requestdatadescription(int* timeStep, double* time, int* coprocessThisTimeStep)
+{
+  vtkCPAdaptorAPI::RequestDataDescription(timeStep, time, coprocessThisTimeStep);
+}
+
+// this function sets needgrid to 1 if it does not have a copy of the grid
+// it sets needgrid to 0 if it does have a copy of the grid but does not
+// check if the grid is modified or needs to be updated
+void needtocreategrid(int* needGrid)
+{
+  vtkCPAdaptorAPI::NeedToCreateGrid(needGrid);
+}
+
+// do the actual coprocessing.  it is assumed that the vtkCPDataDescription
+// has been filled in elsewhere.
+void coprocess()
+{
+  vtkCPAdaptorAPI::CoProcess();
+}

В изначальном формате эффект тот же, только пустых строк нет.

diff -uN -r Source/ Paraview_5.9.1/ > Report.txt
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
diff -uN -r Source/Clients/Catalyst/CAdaptorAPI.cxx Paraview_5.9.1/Clients/Catalyst/CAdaptorAPI.cxx
--- Source/Clients/Catalyst/CAdaptorAPI.cxx 2023-12-27 11:23:21.000000000 +0300
+++ Paraview_5.9.1/Clients/Catalyst/CAdaptorAPI.cxx 2023-03-19 15:55:10.000000000 +0300
@@ -1,51 +1,51 @@
-/*=========================================================================
-
-  Program:   ParaView
-  Module:    CAdaptorAPI.cxx
-
-  Copyright (c) Kitware, Inc.
-  All rights reserved.
-  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
-
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notice for more information.
-
-=========================================================================*/
-#include "CAdaptorAPI.h"
-
-#include "vtkCPAdaptorAPI.h"
-
-// call at the start of the simulation
-void coprocessorinitialize()
-{
-  vtkCPAdaptorAPI::CoProcessorInitialize();
-}
-
-// call at the end of the simulation
-void coprocessorfinalize()
-{
-  vtkCPAdaptorAPI::CoProcessorFinalize();
-}
-
-// this is the function that determines whether or not there
-// is anything to coprocess this time step
-void requestdatadescription(int* timeStep, double* time, int* coprocessThisTimeStep)
-{
-  vtkCPAdaptorAPI::RequestDataDescription(timeStep, time, coprocessThisTimeStep);
-}
-
-// this function sets needgrid to 1 if it does not have a copy of the grid
-// it sets needgrid to 0 if it does have a copy of the grid but does not
-// check if the grid is modified or needs to be updated
-void needtocreategrid(int* needGrid)
-{
-  vtkCPAdaptorAPI::NeedToCreateGrid(needGrid);
-}
-
-// do the actual coprocessing.  it is assumed that the vtkCPDataDescription
-// has been filled in elsewhere.
-void coprocess()
-{
-  vtkCPAdaptorAPI::CoProcess();
-}
+/*=========================================================================
+
+  Program:   ParaView
+  Module:    CAdaptorAPI.cxx
+
+  Copyright (c) Kitware, Inc.
+  All rights reserved.
+  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notice for more information.
+
+=========================================================================*/
+#include "CAdaptorAPI.h"
+
+#include "vtkCPAdaptorAPI.h"
+
+// call at the start of the simulation
+void coprocessorinitialize()
+{
+  vtkCPAdaptorAPI::CoProcessorInitialize();
+}
+
+// call at the end of the simulation
+void coprocessorfinalize()
+{
+  vtkCPAdaptorAPI::CoProcessorFinalize();
+}
+
+// this is the function that determines whether or not there
+// is anything to coprocess this time step
+void requestdatadescription(int* timeStep, double* time, int* coprocessThisTimeStep)
+{
+  vtkCPAdaptorAPI::RequestDataDescription(timeStep, time, coprocessThisTimeStep);
+}
+
+// this function sets needgrid to 1 if it does not have a copy of the grid
+// it sets needgrid to 0 if it does have a copy of the grid but does not
+// check if the grid is modified or needs to be updated
+void needtocreategrid(int* needGrid)
+{
+  vtkCPAdaptorAPI::NeedToCreateGrid(needGrid);
+}
+
+// do the actual coprocessing.  it is assumed that the vtkCPDataDescription
+// has been filled in elsewhere.
+void coprocess()
+{
+  vtkCPAdaptorAPI::CoProcess();
+}
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
09.02.2024, 17:40
Тут, вероятно, разный формат конца строк. Можете сами файлы прикрепить, чтобы форум их не искажал?
0
1 / 1 / 0
Регистрация: 01.09.2009
Сообщений: 159
10.02.2024, 10:32  [ТС]
Переносы строк одинаковые. Три варианта одного файла, но, получается, что версия 1 и 2 это один и тот же файл, так как он не редактировался, а версия 3 это новая версия библиотеки, там только комментарии поменяли.
Вложения
Тип файла: zip Test.zip (2.7 Кб, 0 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2024, 10:32
Помогаю со студенческими работами здесь

QSerialPort принимает только один байт
Замыкаю выходы Tx/Rx друг на друга. Передаю *IDN? . Осциллограф показывает передачу всех 5 байт. Но readAll( ) создает QByteArray лишь с...

Команда атd звонок проходит один раз
Доброго времени суток! Работаю c компонентой bcomport.прописываем номер телефона, выбираем com порт, выставляем скорость , нажимаем...

Напишите процедуру, которая принимает один параметр
Напишите процедуру, которая принимает один параметр – символьную строку – и выводит на экран эту строку столько раз, сколько символов,...

Команда отправленная по TCP/IP выводится только один раз
Здравствуйте! У меня есть скрипт, который получает данные из TCP/IP вот код: using UnityEngine; using System; using System.IO; ...

Всегда проблемы с роутерами. Ни один роутер не принимает детей
И роутеры из react, и из react native. Выдаёт ошибку: TS2559: Type '{ children: Element; }' has no properties in common with type...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru