Seite 1 von 1

[Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Verfasst: Mi Jan 23, 2013 12:33 am
von darksider3
Hey,
wie manche schon gemerkt haben (So hoffe ich) habe ich mir zum Kopieren meiner Dokuwiki-Namensräume ein kleines Perl Skript geschrieben, welches die Dateien, die noch nicht existieren oder nicht den selben inhalt wie deren "Spiegel"1) hat, kopiert und in die angegebene Git-Repository kopiert. Benötigt ist min. Perl 5.12 auf Linux (Ich weiß nicht wie das auf Windows funktioniert^^).
1) "Spiegel" ist die datei, die im selben Verzeichniss mit dem selben Namen liegt.
Das Skript:

Code: Alles auswählen

#!/usr/bin/env perl
use 5.012;
my $_;
my $err;
my $_dPDir="/var/www/dokuwiki-2012-10-13/data/pages/";#=DokuwikiPagesDirectory
my $_gitDir="/home/leon/u-darksiderforge-darksidersforge/";#=Repository Directory
print "Please give the namespace that you want to add to index: ";
chomp($_ = <STDIN>);
$err=system("cp -R -u ".$_dPDir.$_." ".$_gitDir." ");
if($err==0)
{
	print "Copy Succefull."
}
else
{
	print "Error concurred: ".$err;
}
Wie schon erwähnt.. sehr klein ;)
Dazu noch ein etwas (Verzeichniss-)unabhängigeres Skript:

Code: Alles auswählen

#!/usr/bin/perl
use utf8;
use 5.012;
my $_1;
my $_2;
my $err;
print "Please give the Directory, that you want to recursiv copy: ";
chomp($_1 = <STDIN>);
print "\n";
print "And now the directory, in that you want to copy: ";
chomp($_2 = <STDIN>);
$err=system("cp -R -u ".$_1." ".$_2." ");
if($err==0)
{
	print "Copy Succefull."
}
else
{
	print "Error concurred: ".$err;
}
Dazu zu sagen ist nurnoch, das Rekursiv Kopiert wird. Keine Datei oberhalb der angegeben Verzeichnisstruktur wird ausgelassen..

Mit freundlichen Grüßen,

darksider3

Re: [Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Verfasst: Mi Jan 23, 2013 11:22 am
von Xin
Kleiner Hinweis: vielleicht solltest Du wenigstens data/media auch noch kopieren.

Re: [Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Verfasst: Mi Jan 23, 2013 11:26 am
von darksider3
Joar, wäre angebracht...@todo^^

Mfg

Re: [Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Verfasst: Do Jan 24, 2013 9:43 pm
von fat-lobyte
Echt coole Sache...
Glaubst du, man könnte auch sowas in "umgekehrt" schreiben? Ich verwalte mein Git-Tutorial auf GitHub und würde gerne alle Änderungen, die hier von anderen Leuten gemacht werden in meinem eigenen Repo eintragen (am besten noch mit dem Wiki-User in der --author Zeile)

Re: [Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Verfasst: Do Jan 24, 2013 10:06 pm
von darksider3
fat-lobyte hat geschrieben: Echt coole Sache...
Glaubst du, man könnte auch sowas in "umgekehrt" schreiben? Ich verwalte mein Git-Tutorial auf GitHub und würde gerne alle Änderungen, die hier von anderen Leuten gemacht werden in meinem eigenen Repo eintragen (am besten noch mit dem Wiki-User in der --author Zeile)
Ich glaube ich muss dazu noch sagen, dass ich nur die Dateien in die Lokale Repo kopiere, und dann Manuell (könnte man auch automatisch machen, überleg ich mir mal) einen commit erstelle und entsprechend push durchführe...
Du nimmst am besten irgendein Skript, ziehst dir mit der Export funktion (/doku.php?do=export_raw&id=git:DeineSeite" den Quelltext, (Bräuchtest aber warscheinlich eine Komplette liste Aller Existierenden Seiten,da du nicht Rekursiv von fremden servern kopieren kannst) schiebst die Sources in dein Lokals Git Repo, dann die geschichte mit "add .","commit","push" und oben ist es...
Aber ohne großen aufwand fällt mir dazu nichts ein, sorry, dafür kann ich perl oder bash nicht gut genug
EDIT://Du kannst am besten das ganze mit "wget" ziehen ;) Also:

Code: Alles auswählen

#!/usr/bin/bash
cd deine/lokale/repo/
wget --timestamping "/doku.php?do=export_raw&id=git:Seite1"
wget --timestamping "/doku.php?do=export_raw&id=git:Seite2"
wget --timestamping "/doku.php?do=export_raw&id=git:Seite3"
#usw...
git add .
git commit #du weißt wie das geht^^
git push #dasselbe hier
--timpestamping holt immer nur neuere Dateien, als schon vorhanden sind,sortiert nach dem Timestamp
---
Das neue Skript, Kopiert auch media und media_meta(PERL)

Code: Alles auswählen

#!/usr/bin/env perl
use 5.012;
my $_;
my $err;
my $_dPDir="/var/www/dokuwiki-2012-10-13/data/pages/";#=DokuwikiPagesDirectory
my $_dPDirMedia="/var/www/dokuwiki-2012-10-13/data/media/";
my $_dpDirMediaMeta="/var/www/dokuwiki-2012-10-13/data/media_meta/";
my $_gitDir="/home/github/darksiderforge.php.tutorial/dokuwiki_PAGES/";#=Repository Directory
print "Please give the namespace that you want to add to index: ";
chomp($_ = <STDIN>);
$err=system("cp -R -u ".$_dPDir.$_." ".$_gitDir." ");
if($err==0)
{
	print "Pages are succefull copyed\n";
	$err=system("cp -R -u ".$_dPDirMedia.$_." ".$_gitDir."/media/ ");
	if($err==0)
	{
		print "Mediafiles copied succefully too\n";
		$err=system("cp -R -u ".$_dpDirMediaMeta.$_." ".$_gitDir."/media_meta/ ");
		if($err==0)
		{
			print "All copys succefull.\n";
		}
		else
		{
			print "Error Concurred";
		}
	}
	else
	{
		print "Error Concurred";
	}
}
else
{
	print "Error concurred: ".$err;
}
Mfg

Re: [Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Verfasst: Do Jan 24, 2013 10:27 pm
von fat-lobyte
Das könnte funktionieren. Danke für den Tip!

Re: [Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Verfasst: So Jan 27, 2013 5:08 pm
von darksider3
Hallo,
Xin bat mich vor knapp 1 1/2 Stunden, ob ich denn ein kleines Skript schreiben würde, welches die Dateien alle wieder ins dokuwiki hineinkopieren würden(lokal).
Naja, das endresultat sah bei mir so aus:

Code: Alles auswählen

my $_dkw="/var/www/dokuwiki-2012-10-13/";
my $_dkwGit="/home/leon/Arbeitsfläche/dokuwiki_PAGES/";
if(system("test -d ".$_dkw) == 0)
{
	print "dokuwiki directory found.\n";
}
else{
	print "Dokuwiki directory not found! Exit";
	exit(1);
}
if(system("test -d ".$_dkwGit)==0)
{
	print "Git Repo found.\n";
}
else{
	print "Git Repo not found..exit";
	exit(1);
}
system("sudo chmod 777 -R ".$dkwGit);
system("cp -R -u -v ".$_dkwGit."media/ ".$_dkw."data/media/");
system("cp -R -u -v ".$_dkwGit."media_meta/ ".$_dkw."data/media_meta/");
system("cp -R -u -v ".$_dkwGit."php/ ".$_dkw."data/pages/php/");
system("cp -u -v ".$_dkwGit."php.txt ".$_dkw."data/pages/php.txt");
Um das Skript nutzen zu können, müssen die zwei Variablen $_dkw(Voller Systempfad zu dokuwiki Verzeichniss) und $_dkwGit(Auch hier Voller Systempfad. Aber zum Ordner (mit EINSCHLIEßLICH) dokuwiki_PAGES. Root rechte müssen durch ein Passwort erreichbar sein(oder direkt). Dann kann das Skript ohne Probleme ausgeführt werden.
Eventuell wäre es noch ein Punkt für meine Todo liste, dass ganz zu automatisieren... Downloaden(Zip),entpacken,verschieben... Aber dann würde ich die Ausgaben sein lassen, und auf SH umsteigen...(Wegen der verfügbarkeit von verschiedenen FTP Funktionen, keine unnötigen system() befehle mehr :mrgreen: )
Wenn irgendjemand eine idee dazu noch einfällt, so bitte ich euch, diese hier zu posten...Danke :)

MfG
Darksider3