Ich weiß nicht, ob es da schon Lösungen / Ansätze zu o.g. Thema gibt, aber ich habe einfach mal angefangen.
Zur Motivation:
AOO/LO Basic ist nun nicht die Sprache, mit der ich heutzutage große Projekte umsetzen würde, aber ich habe vor 18 Jahren unter SO 5.2 genau mit Starbasic angefangen und das Projekt ist in dieser Zeit so umfangreich geworden, dass ich es nicht in einer anderen Sprache neu schreiben möchte. Erfreulich auch, dass es all die Wechsel über OOo 1.1 zu AOO und jetzt zu LO irgendwie überstanden hat. Also muss man sagen, egal in welcher Sprache ein Programm geschrieben wird, das Relevante ist, dass es das tut, was es tun soll... Was ich aber bei der Entwicklung immer ein wenig hinderlich fand, ist dass man da all die netten Konsolen-Tools wie diff, grep, sed nicht einsetzen konnte. Und eine Versionsverwaltung wie git, wäre auch nicht schlecht.
Damit man diese Sachen nutzen kann, müssen die Dateien entpackt werden.
Da die Dateien content.xml, meta.xml, settings.xml und styles.xml nicht formatiert sind, habe ich diese mit "xmllint -format" noch formatiert.
Damit sollte ein diff auch sinnvoller damit arbeiten.
Hier mal die shell-Scripte zum entpacken und packen:
Code: Alles auswählen
#!/bin/bash
# Script zum Entpacken
TIMESTAMP=`date +%Y%m%d_%H%M%S`
EXTRACT_DIR="./_extract_${TIMESTAMP}"
find . -path "${EXTRACT_DIR}" -prune -o -type d -exec mkdir -pv ${EXTRACT_DIR}/{} ';'
for f in ` find . -path "${EXTRACT_DIR}" -prune -o -type f -print `
do
DESTPATH=${EXTRACT_DIR}` echo ${f} | sed -e 's/^\.//g'`
case ` file ${f} | cut -d: -f2 | sed -e 's/^[[:space:]]*//' ` in
"OpenDocument Text" | "OpenDocument Text Template" | "OpenDocument Spreadsheet")
unzip -qq ${f} -d ${DESTPATH}
for g in ` find ${DESTPATH} -type f -name "content.xml" -o -name "meta.xml" -o -name "settings.xml" -o -name "styles.xml" `
do
mv ${g} "${g}_"
xmllint --format "${g}_" > ${g}
rm "${g}_"
done
;;
*)
cp ${f} ${DESTPATH}
;;
esac
done
Code: Alles auswählen
#!/bin/bash
# Script zum Packen
DEST_DIR="../TEST"
find . \( -name "*.odt" -o -name "*.ott" -o -name "*.ods" \) -prune -o -type d -exec mkdir -pv ${DEST_DIR}/{} ';'
for f in ` find . \( -name "*.odt" -o -name "*.ott" -o -name "*.ods" \) -prune -o -type f -print `
do
DESTPATH=${DEST_DIR}` echo ${f} | sed -e 's/^\.//g'`
cp ${f} ${DESTPATH}
done
for f in ` find . \( -name "*.odt" -o -name "*.ott" -o -name "*.ods" \) -a -type d -print `
do
DESTPATH=${DEST_DIR}` echo ${f} | sed -e 's/^\.//g'`
pushd ${f}
zip -0X "temp.zip" "mimetype"
zip -Xr9 "temp.zip" * --exclude "temp.zip" --exclude "mimetype"
popd
mv "${f}/temp.zip" ${DESTPATH}
done
Da ich bei mir nur *.odt, *.ott und *.ods-Dateien habe, habe ich erst mal nur diese berücksichtigt.
Als nächstes werde ich mich mal mit Git auseinandersetzen und schauen, ob das so funktioniert, wie ich mir das vorstelle.
Kommentare und Verbesserungsvorschläge sind erwünscht.
Gruß
Heiko