# Offtopic: SVN Patch Builder

**URL:** <https://forum.shopware.com/t/offtopic-svn-patch-builder/831>\
**Category:** Off Topic\
**Created:** [26. November 2010 um 09:07 UTC](https://forum.shopware.com/t/offtopic-svn-patch-builder/831 "2010-11-26T09:07:56Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)\
**Post date:** [26. November 2010 um 09:07 UTC](https://forum.shopware.com/t/offtopic-svn-patch-builder/831/1 "2010-11-26T09:07:56Z")

</div>

Moin, eventuell gibt es dafür auch andere Lösungen, habe auf die schnelle keine gefunden. Habe heute Morgen einen kleinen Patch-Builder entwickelt, der ermittelt den Unterschied zwischen 2 SVN Revisionen und checkt das Delta in der Original-Verzeichnisstruktur aus. So hat man einen fertigen Patch, den man nur noch komprimieren muss 😉 Konfiguration: - SVN-Benutzer / Passwort angeben - Default Repository Start - Default Repository End - Encode - Hier kann man Dateien definieren, die in eine gesonderte Verzeichnisstruktur extrahiert werden sollen. (Zum Beispiel um zu verschlüsselnde Dateien auszulagern) - Im Verzeichnis wo das Script liegt, muss ein Ordner patches mit den entsprechenden Verzeichnisrechten existieren. [code]\<?php error\_reporting(E\_ALL);  
ini\_set(„display\_errors“,1);

$username = „“; // SVN User  
$passwort = „“; // SVN Passwort  
$defaultStart = „[http://192.168.178.150/svn/shopware/tags/release-3.5.0-final\_18102010\_105900](http://192.168.178.150/svn/shopware/tags/release-3.5.0-final_18102010_105900)“;  
$defaultEnd = „[http://192.168.178.150/svn/shopware/trunk](http://192.168.178.150/svn/shopware/trunk)“;  
$encode = array(  
);

if (\_POST["start"] && \_POST[„end“]){  
start = escapeshellarg(\_POST[„start“]);  
end = escapeshellarg(\_POST[„end“]);  
$user = escapeshellarg($username);  
$passwort = escapeshellarg($passwort);  
$diff = array();  
$command = „/usr/bin/svn diff --old=$start --new=$end --username $user --password $passwort --non-interactive 2\>&1“; exec($command ,$diff); $diff = implode("\n",$diff); $result = array(); preg\_match\_all("#^Index: (.\*)\n#Um",$diff,$result); if (!is\_writeable(dirname(\_\_FILE\_\_)."/patches")){ die(„Patch folder not writeable“); } $target = dirname(\_\_FILE\_\_)."/patches/".date(„Ymd\_His“); mkdir($target); foreach ($result[1] as $file){ $file = str\_replace(array(„Index:“," „),“",$file); echo $file."\n"; if (checkEncoded($file)==true){ $folder = dirname($file); mkdir($target."/encode/".$folder,0777,true); $targetFile = $target."/encode/".$folder."/".basename($file); }else { $folder = dirname($file); mkdir($target."/".$folder,0777,true); $targetFile = $target."/".$folder."/".basename($file); } checkout = escapeshellarg(\_POST[„end“]."/".$file); $command = „/usr/bin/svn export $checkout $targetFile --username $user --password $passwort --non-interactive 2\>&1“; exec($command ,$diff); } exit; } function checkEncoded($file){ global $encode; foreach ($encode as $check){ $check = addslashes($check); $check = strtolower($check); if (preg\_match("#$check#Ui",$file)){ return true; } } return false; } ?\>

body { font-size:12px; font-family: Arial; }

| Start-Revision: | |
| End-Revision: | |

[/code]

---

<div class="post-metadata">

**Author:** ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)\
**Post date:** [26. November 2010 um 09:09 UTC](https://forum.shopware.com/t/offtopic-svn-patch-builder/831/2 "2010-11-26T09:09:26Z")

</div>

P.s. Von nun an werden alle Patches kumulativ ausgeliefert - d.h. man kann die Zwischenversionen auslassen und z.B. direkt von 3.5.1 auf 3.5.3 aktualisieren!

---

<div class="post-metadata">

**Author:** ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)\
**Post date:** [26. November 2010 um 10:09 UTC](https://forum.shopware.com/t/offtopic-svn-patch-builder/831/3 "2010-11-26T10:09:09Z")

</div>

[quote=“Stefan Hamann”]P.s. Von nun an werden alle Patches kumulativ ausgeliefert - d.h. man kann die Zwischenversionen auslassen und z.B. direkt von 3.5.1 auf 3.5.3 aktualisieren![/quote] Gibt es da auch eine Dokumentation der Änderungen an den Templates? Das macht z.B. OXID vorbildlich, denn die liefern in dem Update-Package einen Ordner mit aus, in dem man (per HTML-Seite) alle geänderten Template-Dateien sieht, und dann über einen Link zu einem (HTML formatierten) “Diff” jedes einzelnen Templates genau sieht, was sich zwischen den beiden Releases in den Template-Dateien geändert hat. Das ist eine sehr große Hilfe, weil man daraus sieht, welche Template Variablen/Blöcke dazu kamen oder entfielen, oder welche HTML-Änderungen es gab. Und jeder, der mit geänderten Templates arbeitet, muss das wissen, und ohne so ein “Diff” ist das äußerst mühsam… Guckt Euch so ein Updatepackage doch einfach mal an… 🕶
