EDIT [02.10.2021] - Eine neuere Version (kpl. überarbeitet) gibt es hier.
EDIT [04.01.2019] - Mit v 1.4 wird das Skript allgemeingültig. Ohne weiter Änderungen am Skript kann jetzt jeder Dateityp in die Versionsverwaltung und/oder TimeStamp-Routine aufgenommen werden!
ACHTUNG! Script breaking chance! DIE PROPERTIES MÜSSEN ZWINGEND GEÄNDERT WERDEN!
Es wird nicht mehr für jeden Dateityp eine eigen Property erstellt, sondern wie folgt:
Auflisten der Dateitypen, für die ein Timestamp gesetzt werden soll
#~ TimeStamp setzen für folgende Dateitypen: EXT|EXT..
Use.TimeStamp.With.Files=au3|lua|py
Die Zeichen für Zeilenkommentare der verschiedenen Dateitypen müssen angegeben werden
#~ Kommentarzeichen für einzeiligen Kommentar: EXT=ZEICHEN|..|..
Line.Comment.Char=au3=;|lua=--|py=#
Auflisten der Dateitypen, für die ein Versionsbackup gespeichert werden soll
#~ Versions-Backup anwenden für folgende Dateitypen: EXT|EXT..
Use.VersionBackUp.With.Files=au3|lua
Version.Prefix und Version.Path.* bleiben unverändert.
Hallo,
ich habe die TimeStamp Funktion nun zu einer kleinen Versionsverwaltung für Skripte erweitert. Dabei habe ich mich allerdings auf eine zweistufige Versionierung (v Main.Sub) beschränkt.
So gehts:
In den User.properties wird festgelegt in welchem Pfad die Versionsbackups gespeichert werden sollen. Mit der Angabe von 'Default' geschieht das im Skriptordner (ebenso bei fehlender Property oder Property ohne Wert), wird ein fester Ordner angegeben (ohne abschließenden Backslash!), wird dieser verwendet, mit 'no' wird keine Versionssicherung durchgeführt. Es lassen sich die in SciTE üblichen Pfadmakros (z.B. "$(SciteDefaultHome)" ) verwenden.
Beim erstmaligen Speichern einer Datei wird (wenn gewünscht)
- standardmäßig die Versionsnummer 'v 0.1' vergeben
- im Pfad aus den .properties wird ein Unterverzeichnis der Form: \BackupVer_DATEINAME.EXT\ angelegt
- in diesem Ordner wird eine Kopie der Datei als: DATEINAME[0.1].EXT erstellt
Beim Speichern ohne Setzen eines Markers wird nur der TimeStamp aktualisiert.
Es können folgende Marker gesetzt werden (direkt hinter die aktuelle Versionsnummer):
- v Subversionsnr. wird um 1 erhöht
- V Mainversionsnr. wird um 1 erhöht, Subversionsnr. wird auf 0 gesetzt
- n die autom. Zählung ist nicht aktiv - aber eine per Hand eingetragene Änderung der Versionsnr. wird übernommen
So werden die Marker gesetzt:
Erhöhen Sub-Version:
;-- TIME_STAMP 2011-05-24 14:36:36 v 0.1v ==> ergibt dann nach dem Speichern: v 0.2
Erhöhen Main-Version:
;-- TIME_STAMP 2011-05-24 14:36:36 v 0.1V ==> ergibt dann nach dem Speichern: v 1.0
Setzen gewünschter Versions-Nr.:
;-- TIME_STAMP 2011-05-24 14:36:36 v 0.1
==> 0.1 ersetzen mit gewünschter Versions-Nr, z.B.: 0.5n ergibt dann nach dem Speichern: v 0.5
NEU:
Um von einem Skript keine Backups anzulegen einfach vor dem ersten Speichern ein * an die erste Position im Editor setzen. Dafür notwendige Codeänderung: s. Post #2
Somit habe ich im Normalfall einen TimeStamp und lege bei Bedarf eine höhere Version mit Backup an.
Da LUA ja keine Windows-orientierte Sprache ist, mußte ich einige Funktionen erst selbst zusammenbasteln (FileExists, FileCopy, FolderExists, FolderCreate). Nicht wundern, dass beim Erstellen des jeweiligen Versionsordners ganz kurz ein CMD-Window aufpopt. Aber da mußte ich den Umweg über die CMD nehmen, da LUA keine direkte Möglichkeit zum Erstellen eines Ordners bietet. <-- Behoben durch Einsatz der shell.dll.
In meinen Tests hat bisher alles gut funktioniert, hoffe ihr werdet das dann bestätigen können.
Edit 17.05.2011:
Manchmal muß man einfach nochmal drüber schlafen, sonst sieht man den Wald vor lauter Bäumen nicht.
Eine Kopie der bestehenden Datei anzulegen ist ja gar nicht möglich, da die Aktion bei "BeforeSave" stattfindet. Somit wurde zum Einen der alte Inhalt gespeichert (mit falscher VersNr) und zum Anderen crashte es bei einer neuen Datei, da dort die zu kopierende ja noch gar nicht existierte.
Habe diesen Bug jetzt beseitigt und schreibe den aktuellen Editorinhalt in das Versionsbackup.
Dazu sollte dann die SciTEStartup.lua so aussehen
geändert 29.05.
--------------------------------------------------------------------------------
-- SciTE startup script.
--------------------------------------------------------------------------------
-- A table listing all loaded files.
LoadLuaFileList = { }
--------------------------------------------------------------------------------
-- LoadLuaFile(file, directory)
--
-- Helper function for easily loading Lua files.
--
-- Parameters:
-- file - The name of a Lua file to load.
-- directory - If specified, file is looked for in that directory. By default,
-- this directory is $(SciTEDefaultHome)\Lua.
--------------------------------------------------------------------------------
function LoadLuaFile(file, directory)
if directory == nil then
directory = props["SciteDefaultHome"] .. "\\Lua\"
end
table.insert(LoadLuaFileList, directory .. file)
dofile(directory .. file)
end -- LoadLuaFile()
-- Load all the Lua files.
LoadLuaFile("Class.lua") -- Always load first.
LoadLuaFile("Common.lua") -- Always load second.
LoadLuaFile("AutoItPixmap.lua")
LoadLuaFile("AutoHScroll.lua")
LoadLuaFile("AutoItAutoComplete.lua")
LoadLuaFile("LoadSession.lua")
LoadLuaFile("AutoItIndentFix.lua")
LoadLuaFile("EdgeMode.lua")
LoadLuaFile("SmartAutoCompleteHide.lua")
LoadLuaFile("Tools.lua")
LoadLuaFile("AutoItTools.lua")
LoadLuaFile("AutoItGotoDefinition.lua")
LoadLuaFile("AutoCloseBraces.lua") -- wenn diese Datei nicht verwendet wird ==> mit '--' auskommentieren oder löschen
-- Start up the events (Calls OnStartup()).
EventClass:BeginEvents()
-- Erst nach Registrierung der EventClass werden eigene Dateien geladen
LoadLuaFile("AutoStampSaveVersion.lua") -- enthält Event: "OnBeforeSave"
Alles anzeigen
Die Datei "AutoStampSaveVersion[1.4].lua" speichern und umbenennen zu "AutoStampSaveVersion.lua")
Und hier die Anpassungen in den SciTEUser.properties
geändert 04.01.19
# END => DO NOT CHANGE ANYTHING BEFORE THIS LINE #-#-#-#-#-#
#~ == MY SPECIAL SETTINGS =====================BEGIN
#~ TimeStamp setzen für folgende Dateitypen: EXT|EXT..
Use.TimeStamp.With.Files=au3|lua|py
#~ Kommentarzeichen für einzeiligen Kommentar: EXT=ZEICHEN|..|..
Line.Comment.Char=au3=;|lua=--|py=#
#~ Versions-Backup anwenden für folgende Dateitypen: EXT|EXT..
Use.VersionBackUp.With.Files=au3|lua
Version.Prefix=BUVer_
#~ Pfad für Version Backup Ordner [VER_DIR]:
#~ WICHTIG!: Pfad NICHT in Quotierung!
#~ KEIN folgender Backslash!
#~ "Version.Path.*=default" - erstellt Unterverzeichnis in aktuellem Skript-Ordner (ebenso, wenn Property nicht vorhanden oder ohne Wert)
#~ Ordnername: $(Version.Path.ext)\$(Version.Prefix)FILENAME.EXT\
#~ Dateiname: \FILENAME[Version-Number].EXT
Version.Path.au3=C:\Code\VersionBackup\au3
Version.Path.lua=C:\Code\VersionBackup\lua
#~ == MY SPECIAL SETTINGS =======================END
Alles anzeigen
Edit 21.05.2011:
Ich habe den Code nochmal überarbeit, die Funktionen jetzt alle sauber in ein Array gepackt und eine kleine Funktionserweiterung vorgenommen: Wird ein Skript beim erstmaligen Speichern von der Versionsverwaltung ausgenommen (Asterisk an erster Editorposition), so wird in diesem Fall auch nur der Timestamp gesetzt. Auch bei späterem Speichern bleibt dies so. Aber man kann jederzeit durch Markieren mit 'v' oder 'V' das Skript in die Versionsverwaltung aufnehmen.
Ich habe es soeben im EN-Forum gepostet, deshalb vorerst mal nur der Link dorthin: AutoStampSaveVersion.lua
Edit 29.05.2011
Die im letzten Edit benannten Änderungen sind jetzt auch hier im Skript. Alle nicht global benötigten Funktionen sind jetzt auch als lokal erstellt.
Zusätzlich erweitert: Beim Speichern springt die Cursorposition nicht mehr an den unteren Editorrand, die Ansicht im Editor ist identisch zu 'VorSpeichern'.
Aktuelle Version: "v 1.1"
Edit: 16.05.2014
Nach Jahren mal wieder was Neues hier. Ich habe jetzt die shell.dll integriert, somit gibt es kein aufpopendes Fenster mehr, wenn ein neuer Ordner beim Sichern erstellt wird.
Weiterhin habe ich die Darstellung des TimeStamps verändert, mit der #Region gefällt mir das nicht mehr. Es wird jetzt in dieser Form ausgegeben:
;-- TIME_STAMP 2014-05-16 12:41:54 v 0.1
Es ist eine zusätzliche Property in der SciTEUser.properties festzulegen: Version.Prefix=BUVer_
Bisher wurde automatisch der Präfix "BUVer_" verwendet bei der Erstellung des Ordners für eine neu zu sichernde Datei. Das kann jetzt vom User festgelegt werden.
Ansonsten ändert sich nichts an der Vorgehensweise.
Um die shell.dll einzubinden, empfehle ich folgendes Vorgehen:
Installation shell.dll
- In der SciTEUser,properties eine Property erstellen für die eigenen Lua-Pfade Lua.User.Scripts.Path=C:\Code_AutoIt\LUA
- In diesen Pfad die shell.dll kopieren
- In der SciTEStartup.lua am Anfang einfügen
local sUserLua = props["Lua.User.Scripts.Path"]
LUA_USER_PATH = sUserLua .. "\\?.dll;" .. sUserLua .. "\\?\\?.dll;"
package.cpath = LUA_USER_PATH .. package.cpath
Jetzt werden die in diesen Pfaden gespeicherten Dll beim Start von SciTE geladen.
Die bereits vorhandenen TimeStamps können mit der beigefügten "ReplaceTimeStamp.au3" auf die neue Version geswitcht werden. Einfach den Root auswählen, alle *.au3 werden rekursiv von dort ausgelesen und vorhandene TimeStamps auf die neue Version geswitcht. Sicherheitshalber wird zuerst im Root ein Ordner ".\BAK_TimeStamp\" erstellt, in den alle gefundenen au3-Dateien in der vorhandenen Ordnerstruktur gesichert werden.
Aktuelle Version: "v 1.4"