Dies ist der Befehl makepatchp, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
makepatch – Skript erstellen, um einen Quellbaum zu aktualisieren
ZUSAMMENFASSUNG
makepatch [ Optionen ] alt-src neue Quelle
Einführung
Traditionell werden Quellbäume mit aktualisiert Flicken Programm, Verarbeitungspatch
Informationen, die von der erzeugt werden diff Programm. Obwohl diff und Flicken Tue etwas sehr Gutes
Job beim Patchen von Dateiinhalten, die meisten Versionen kümmern sich nicht um das Erstellen und Löschen von Dateien und
Verzeichnisse und Anpassung von Dateimodi und Zeitstempeln. Neuere Versionen von diff und Flicken
scheinen in der Lage zu sein, Dateien und sehr neue Versionen davon zu erstellen Flicken kann Dateien entfernen. Aber
das ist alles.
Ein weiteres typisches Problem besteht darin, dass Patch-Kits normalerweise aus dem Internet heruntergeladen werden
per E-Mail übermittelt. Es ist oft wünschenswert, die Richtigkeit von a zu überprüfen
Lesen Sie das Patch-Kit, bevor Sie überhaupt versuchen, es anzuwenden.
Die makepatch Das Paket soll diese Einschränkungen überwinden.
BESCHREIBUNG
Die makepatch Paket enthält zwei Perl-Programme: makepatch und anwendenpatch.
makepatch generiert ein Patch-Kit aus zwei Quellbäumen. Es durchquert die Quelle
Verzeichnis und führt a aus diff für jedes Paar entsprechender Dateien, wodurch die Ausgabe akkumuliert wird
in ein Patch-Kit. Es kennt die Konventionen für Patch-Kits: wenn eine Datei benannt ist
„patchlevel.h“ existiert, wird also zuerst behandelt Flicken kann die Version der Quelle überprüfen
Baum. Auch um mit den nicht perfekten Versionen von umzugehen Flicken die im Einsatz sind, liefert es
„Index:“ und „Prereq:““-Zeilen, also Flicken kann die zu patchenden Dateien korrekt finden und es
Verschiebt den Patch in das aktuelle Verzeichnis, um Probleme beim Erstellen neuer Dateien zu vermeiden.
Die Liste der Dateien kann in einem sogenannten Dateiverzeichnis angegeben werden MANIFEST Datei, kann es aber auch sein
wird durch rekursives Durchlaufen des Quellbaums generiert. Dateien können per Shell ausgeschlossen werden
Stil-Platzhalter und Perl-Regex-Muster.
Aber das ist es nicht! makepatch fügt außerdem einige zusätzliche Informationen in das Patch-Kit ein
zur Verwendung durch die anwendenpatch
Es ist wichtig zu betonen, dass das generierte Patch-Kit weiterhin eine gültige Eingabe darstellt Flicken.
Bei Verwendung mit FlickenEs finden keine Überprüfungen statt und bei neuen Dateien kann es zu Problemen kommen
erstellt werden müssen. makepatch stellt dem Patch-Kit ein kleines Shell-Skript voran
erstellt die notwendigen Dateien und Verzeichnisse für den Patch-Vorgang. Wenn Sie nicht laufen können
anwendenpatch Aus irgendeinem Grund können Sie das Patch-Kit ausführen as a Schale Skript vorbereiten der
Quellverzeichnis für den Patch-Vorgang.
Die anwendenpatch Das Programm wird Folgendes tun:
· Es wird umfassend überprüft, ob das Patch-Kit vollständig ist und währenddessen nicht beschädigt ist
Übertragung.
· Es werden einige Heuristiken angewendet, um zu überprüfen, in welchem Verzeichnis sich der Patch befindet
apply enthält tatsächlich die erwarteten Quellen.
· Es erstellt nach Bedarf Dateien und Verzeichnisse.
· Der Patch wird durch Ausführen von angewendet Flicken
· Nach Abschluss werden veraltete Dateien, Verzeichnisse und „.orig“-Dateien entfernt, Dateimodi
der neuen Dateien werden gesetzt und die Zeitstempel aller gepatchten Dateien werden angepasst.
Beachten Sie, dass anwendenpatch erfordert nur die Flicken Programm. Es ist nicht auf eine Shell oder Shell angewiesen
Werkzeuge. Dadurch ist es möglich, Patches auf Nicht-Unix-Systemen anzuwenden.
Allgemein Verwendung
Angenommen, Sie haben ein Archiv „pkg-1.6.tar.gz“, das die Quellen für das Paket „pkg“ enthält.
Version 1.6 und ein Verzeichnisbaum „pkg-1.7“ mit den Quellen für Version 1.7. Der
Der folgende Befehl generiert ein Patch-Kit, das die 1.6-Quellen auf ihre 1.7 aktualisiert
Versionen:
makepatch pkg-1.6.tar.gz pkg-1.7 > pkg-1.6-1.7.patch
Um dieses Skript anzuwenden, gehen Sie in das Verzeichnis mit den 1.6-Quellen und füttern Sie das Skript
zu anwendenpatch:
CD alt/pkg-1.6
Applypatch pkg-1.6-1.7.patch
anwendenpatch wird überprüfen, ob die Ausführung am richtigen Ort erfolgt, und alles Notwendige tun
Updates.
Standardmäßig makepatch stellt einige Zeilen mit Fortschrittsinformationen bereit, zum Beispiel:
Extrahieren von pkg-1.6.tar.gz nach /tmp/mp21575.d/old...
Manifest MANIFEST für pkg-1.6 enthält 1083 Dateien.
Manifest MANIFEST für pkg-1.7 enthält 1292 Dateien.
Die Dateilisten werden verarbeitet ...
Patches sammeln ...
266 Dateien müssen gepatcht werden.
Es müssen 216 Dateien und 8 Verzeichnisse erstellt werden.
7 Dateien müssen entfernt werden.
anwendenpatch stellt standardmäßig keine Feedback-Informationen bereit.
Makepatch Argumente
makepatch erfordert zwei Argumente: old_src und new_src.
alt-src
Dies ist der Name einer einzelnen Datei oder eines Verzeichnisses, das Kopien davon enthält
ältere Version der Zieldateien; mit anderen Worten, Kopien der Dateien vor zu jedem
Änderungen.
Alternativ kann es sich um den Namen eines Archivs handeln, das die zu verarbeitenden Dateien enthält.
Zulässige Archivformate sind gzipped tar (Name endet auf „.tar.gz“ oder „.tgz“),
bzipped tar (Name endet auf „“.tar.bz2“), einfaches tar (Name endet auf „“.tar“ und zip
(Name endet auf „“.zip“).
neue Quelle
Dies ist der Name einer einzelnen Datei oder eines Verzeichnisses, das Kopien davon enthält
neuere Version der Zieldateien; mit anderen Worten, Kopien der Dateien nachdem die
Es wurden Änderungen vorgenommen.
Alternativ kann es sich um den Namen eines Archivs handeln, das die zu verarbeitenden Dateien enthält.
Das von generierte Patch-Skript makepatch kümmert sich um die Erstellung neuer Dateien und
Verzeichnisse, aktualisieren Sie vorhandene Dateien und entfernen Sie Dateien und Verzeichnisse, die nicht mehr vorhanden sind
anwesend in der neue Quelle Verzeichnis.
MANIFEST Dateien
Der Zweck einer Manifestdatei besteht darin, die Liste der Dateien bereitzustellen, aus denen ein Paket besteht.
Manifestdateien werden traditionell als „MANIFEST“ bezeichnet und befinden sich im Verzeichnis der obersten Ebene
des Pakets.
Obwohl es keinen formalen Standard für den Inhalt von Manifestdateien gibt, makepatch verwendet
folgende Regeln:
· Wenn die zweite Zeile aus der Manifestdatei wie eine Trennlinie aussieht (z. B. ist sie es).
leer ist oder nur Bindestriche enthält), wird sie verworfen, ebenso wie die erste Zeile.
· Leere Zeilen und Zeilen, die mit einem „#“ beginnen, werden ignoriert.
· Wenn in einer Zeile mehrere durch Leerzeichen getrennte „Wörter“ vorhanden sind, wird das erste Wort berücksichtigt
soll der Dateiname sein.
Standard Behandlungen
Standardmäßig makepatch sucht nach Dateien mit dem Namen „MANIFEST“ in den obersten Verzeichnissen von
die alten und die neuen Quellbäume. Wenn diese Dateien (oder eine davon) gefunden werden, sind sie es
gebraucht. Wenn keine Manifestdatei gefunden werden konnte, wird davon ausgegangen, dass das Paket aus allen Dateien besteht
im Verzeichnis.
Der Standardname der Standardmanifestdatei kann mit der Befehlszeilenoption geändert werden
„-automanifest“ siehe Abschnitt „Befehlszeilenoptionen“.
Ausdrücklich Benennung of Manifest Dateien
Die Befehlszeilenoptionen „-oldmanifest“ und „-newmanifest“ können explizit verwendet werden
Bestimmen Sie alte und neue Manifestdateien. Die Option „-manifest“ ist eine kurze Möglichkeit, eine solche festzulegen
Manifestdatei sowohl für den alten als auch für den neuen Quellbaum.
unterdrückt auf natürliche Weise das Hungergefühl Manifest Datei Verarbeitung
Mit der Befehlszeilenoption „-nomanifest“ kann die gesamte Verarbeitung von Manifestdateien unterdrückt werden.
Es wird davon ausgegangen, dass das Paket aus allen Dateien in den Quellverzeichnissen besteht.
Makepatch Optionen
makepatch Es benötigt mehrere Optionen, um sein Verhalten zu steuern. Optionen werden normalerweise auf angegeben
die Befehlszeile, aber makepatch kann im Folgenden Optionen aus drei Quellen übernehmen
Auftrag:
· Umgebungsvariable MAKEPATCHINIT.
Wenn diese Umgebungsvariable festgelegt ist, wird ihr Inhalt als Befehlszeile betrachtet
Optionen, die beim Start verarbeitet werden. Alle normalen Optionen sind zulässig, plus eine:
-rcfile Dateinamen. Möglichkeit -rcfile kann verwendet werden, um eine alternative Optionsdatei anzugeben, siehe
unten mit.
· Optionsdateien.
makepatch versucht zunächst, eine Datei mit dem Namen zu verarbeiten /etc/makepatchrc. (Dies ist ein Unixismus.)
Es ist in Ordnung, wenn diese Datei fehlt.
Nächstes makepatch verarbeitet eine Datei mit dem Namen .makepatchrc im Home-Verzeichnis des Benutzers,
wenn es existiert.
Nach der Verarbeitung dieser Datei makepatch verarbeitet eine Datei mit dem Namen .makepatchrc in England,
aktuelles Verzeichnis, falls vorhanden. Für diese Datei kann ein alternativer Name angegeben werden
mit Option -rcfile in Umgebungsvariable MAKEPATCHINIT. Dies ist der einzige Weg
Geben Sie einen alternativen Namen für die Optionsdatei an.
In allen Optionsdateien sind Leerzeilen und Zeilen, die mit „;“ beginnen, nicht zulässig. oder „#“ werden ignoriert. Alle
Bei anderen Zeilen wird davon ausgegangen, dass sie genau so Optionen enthalten, als wären sie angegeben worden
die Befehlszeile.
· Die Befehlszeile.
Befehl Linie Optionen
Bei Optionen wird die Groß-/Kleinschreibung nicht berücksichtigt und sie können auf Eindeutigkeit abgekürzt werden.
-Bezeichnung Text
Geben Sie einen beschreibenden Text für diesen Patch an. Mehrere -Bezeichnung Optionen können sein
geliefert.
Wenn keine Beschreibung angegeben ist, versucht das Programm, eine zu erraten. Dies ist in der Regel möglich
wenn beide Verzeichnisse einfache Namen haben, z. B. „pkg-1.16“. Wenn keine Beschreibung möglich ist
bestimmt, wird das Programm danach fragen.
-Diff cmd
Falls angegeben, cmd ist der Befehl, der verwendet werden soll, um die Unterschiede zwischen den zu generieren
zwei Versionen der Dateien. Wenn nicht angegeben, verwendet dieser Befehl standardmäßig „diff -c“.
Um optimale Ergebnisse zu erzielen, verwenden Sie nur „diff -c“ oder „diff -u“. Auf jeden Fall ist es sollen produziert
entweder Kontext oder einheitliche Diff-Ausgabe.
-Patchlevel pfile
Falls angegeben, pfile gibt eine alternative Datei an, die anstelle von verwendet werden soll
"patchlevel.h".
-automatisch manifestieren mfile
makepatch verwendet automatisch Manifestdateien mit dem angegebenen Namen, wenn sie in erscheinen
die Verzeichnisse. Der Standardname ist „MANIFEST".
-nomanifest
Unterdrücken Sie die Verwendung von Manifestdateien.
-Manifest mfile
Falls angegeben, mfile Gibt den Namen der Manifestdatei an, die aus einer Liste besteht
der darin enthaltenen Dateien alt und den neu Verzeichnisse.
-oldmanifest omfile
Falls angegeben, omfile Gibt den Namen der Manifestdatei an, die aus einer Liste besteht
der darin enthaltenen Dateien alt Verzeichnis. Diese Option ist für den Einsatz in konzipiert
in Verbindung mit dem -newmanifest Möglichkeit. Notiere dass der alt und neu Verzeichnisse müssen
noch angezeigt werden.
-newmanifest nmfile
Falls angegeben, nmfile Gibt den Namen der Manifestdatei an, die aus einer Liste besteht
der darin enthaltenen Dateien neu Verzeichnis. Diese Option ist für den Einsatz in konzipiert
in Verbindung mit dem -oldmanifest Möglichkeit. Notiere dass der alt und neu Verzeichnisse müssen
noch angezeigt werden.
-[nicht]rekursiv
makepatch rekursiert standardmäßig durch Verzeichnisse. Möglichkeit -norecurse verhindert
Rekursion über die ursprünglichen Verzeichnisse hinaus.
-[nicht]folgen
Wenn diese Option festgelegt ist, werden symbolische Links zu Verzeichnissen so durchlaufen, als wären sie echte Verzeichnisse.
-infocmd Befehl
Falls angegeben, die Ausgabe von run Befehl wird vor jedem Patch-Block hinzugefügt.
Befehl wird zuerst die folgenden Ersetzungen durchlaufen: %oP wird durch ersetzt
Name der alten Datei, %nP wird durch den Namen der neuen Datei ersetzt. "%%" wird sein
durch ein einzelnes „%“ ersetzt; Weitere „%“-Sequenzen können in zukünftigen Versionen hinzugefügt werden. Wenn ein
Wenn eine neue Datei erstellt wird, wird der Name der neuen Datei sowohl für %oP als auch angegeben
%nP.
Beachten Sie, dass %oP und %nP den „%“-Sequenzen von nachempfunden sind gefunden -printf.
-ausschließen Anleitungen
Falls angegeben, Dateien, die dem Shell-Muster entsprechen Anleitungen wird ausgeschlossen. Nur
Es werden Platzhalterzeichen „*“ und „?“ sowie Zeichenklassen „[...]“ behandelt. Mehrere
-ausschließen Optionen können bereitgestellt werden.
-exclude-regex Anleitungen
Falls angegeben, Dateien und Verzeichnisse, die dem Perl-Muster für reguläre Ausdrücke entsprechen
Anleitungen wird ausgeschlossen. Mehrere -exclude-regex Optionen können bereitgestellt werden.
-[nicht]Ausschlussstandard
Standardmäßig festgelegt. Wenn festgelegt, wird ein gemeinsamer Satz von Dateien und Verzeichnissen ignoriert.
Siehe auch Abschnitt „Standard-Ausschlussmuster“.
-[nicht]Ausschluss-Lebensläufe
Wenn festgelegt, sind Dateien und Verzeichnisse, die normalerweise Teil des Versionskontrollsystems CVS sind
ausgeschlossen.
Außerdem werden „.cvsignore“-Dateien genau wie CVS berücksichtigt.
Siehe auch Abschnitt „Standard-Ausschlussmuster“.
-[nicht]ausschließen-rcs
Wenn festgelegt, sind dies Dateien und Verzeichnisse, die normalerweise Teil des Versionskontrollsystems RCS sind
ausgeschlossen.
Siehe auch Abschnitt „Standard-Ausschlussmuster“.
-[nicht]ausschließen-sccs
Wenn diese Option festgelegt ist, sind dies Dateien und Verzeichnisse, die normalerweise Teil des Versionskontrollsystems SCCS sind
ausgeschlossen.
Siehe auch Abschnitt „Standard-Ausschlussmuster“.
-[nicht]ausschließen-vc
Abkürzung für (re)setting -exclude-rcs, -exclude-cvs und -exclude-sccs.
-[nicht]CVS-Schlüsselwörter ignorieren
Unterschiede in CVS-Schlüsselwortdaten (z. B. „Id“, „Header“, „Revision“) werden ignoriert.
vorausgesetzt, es gibt keine weiteren Unterschiede im selben Stück. Diese Option ist sehr erfolgreich
haarige Regex zum --ignore-matching-lines Option der diff Programm, und daher
erfordert GNU diff. Diese Einschränkung kann in einer zukünftigen Version aufgehoben werden.
-[nicht]rcs-keywords ignorieren
Das gleiche wie -[nicht]CVS-Schlüsselwörter ignorieren.
-Extrakt Anleitungen=Befehl
Definieren Sie zusätzliche Extraktionsregeln für Archive. Wenn der Name der Quelle bzw
Das Ziel entspricht dem Perl Anleitungenden Befehl wird mit aktiviertem Archiv ausgeführt
Standardeingabe und das aktuelle Verzeichnis wird auf den Speicherort gesetzt, an dem sich die Dateien befinden müssen
extrahiert. Mehrere -Extrakt Optionen können bereitgestellt werden. Benutzerdefinierte Regeln überschreiben
eingebaute Regeln.
Integrierte Regeln sind:
.+\.(tar\.gz|tgz) => "gzip -d | tar xpf -"
.+\.(tar\.bz2) => "bzip2 -d | tar xpf -"
.+\.tar => "tar xf -"
.+\.zip => "unzip -"
Die Muster sind implizit am Anfang und Ende des Dateinamens verankert.
-[nicht]ident
Wenn festgelegt, werden der Programmname und die Version gemeldet.
-[nicht]ausführlich
Dies ist standardmäßig eingestellt makepatch Informationen über seine Aktivität anzeigen
zu stderr.
-[nicht]ruhig
Das Gegenteil von -verbose. Wenn festgelegt, gibt dies Anweisungen makepatch um die Anzeige von zu unterdrücken
Aktivitätsinformationen.
-[nicht]Hilfe
Wenn dies festgelegt ist, wird eine kurze Hilfemeldung angezeigt und anschließend das Programm
wird sofort beendet.
Standard Ausschließen Patterns
Die folgenden Dateimuster sind immer ausgeschlossen:
*~ *.a *.bak *.BAK *.elc *.exe *.gz *.ln *.o *.obj
*.olb *.old *.orig *.rej *.so *.Z
.del-* .make.state .nse_depinfo Kern
Tags TAGS
Option -exclude-sccs fügt hinzu:
p.* s.* SCCS
Option -exclude-rcs fügt hinzu:
,* *,v RCS RCSLOG
Option -exclude-cvs fügt „.cvsignore“-Muster hinzu und:
.#* #* _$* *$ CVS CVS.adm cvslog.*
Bitte lassen Sie mich wissen, wenn ich etwas verpasst habe.
Arbeitsumfeld Variablen
MAKEPATCHINIT
Wenn diese Umgebungsvariable festgelegt ist, wird ihr Inhalt als Befehlszeile betrachtet
Optionen, die beim Start verarbeitet werden. Alle normalen Optionen sind zulässig, plus eine:
-rcfile Dateinamen. Wenn -rcfile angegeben wird, wird die Datei und alle Zeilen davon gelesen
Es wird davon ausgegangen, dass es Optionseinstellungen enthält, wie im Abschnitt „Makepatch-Optionen“ beschrieben.
TMPDIR
Mit „TMPDIR“ kann der Bereich angegeben werden, in dem temporäre Dateien abgelegt werden. Es
Standardmäßig ist „/ Tmp".
TEMP
Alternativ zu „TMPDIR“ kann „TEMP“ verwendet werden.
Beispiele
Angenommen, Sie haben einen Verzeichnisbaum „pkg-1.6“, der die Quellen für das Paket „pkg“ enthält.
Version 1.6 und ein Verzeichnisbaum „pkg-1.7“ mit den Quellen für Version 1.7. Der
Der folgende Befehl generiert ein Patch-Kit, das die 1.6-Quellen auf ihre 1.7 aktualisiert
Versionen:
makepatch pkg-1.6 pkg-1.7 > pkg-1.6-1.7.patch
Um dieses Skript anzuwenden, gehen Sie in das Verzeichnis pkg-1.6 und geben Sie das Skript dort ein anwendenpatch:
CD alt/pkg-1.6
Applypatch pkg-1.6-1.7.patch
anwendenpatch wird überprüfen, ob die Ausführung am richtigen Ort erfolgt, und alles Notwendige tun
Updates.
Dies ist eine Möglichkeit, Manifestdateien zu generieren und zu verwenden:
(cd pkg-1.6; find . -type f -print > OLDMANIFEST)
(cd pkg-1.7; find . -type f -print > NEWMANIFEST)
makepatch \
-oldmanifest pkg-1.6/OLDMANIFEST \
-newmanifest pkg-1.7/NEWMANIFEST \
pkg-1.6 pkg-1.7 > pkg-1.6-1.7.diff
Fehler und Einschränkungen
Ein Großteil der Arbeit von makepatch verarbeitet Dateinamen. makepatch wurde getestet
Es ist auf Unix-Systemen umfangreich verfügbar, es kann jedoch nicht garantiert werden, dass es auch auf anderen Systemen funktioniert.
anwendenpatch Es wird wiederholt berichtet, dass die Verarbeitung korrekt ist makepatch generierte Patch-Kits auf
auch moderne 32-Bit-Windows-Systeme.
makepatch kennt keine symbolischen Links. Diese werden wie einfache Dateien behandelt.
Wenn die verwendeten bzw. generierten Dateilisten unterschiedliche Verwendungen verwenden, kann es zu falschen Ergebnissen kommen
Pfadtrennzeichen.
Verwenden Sie makepatchp online über die Dienste von onworks.net