[Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Pascal, Basic und andere nicht aufgelistete
Antworten
Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

[Perl]Dokuwiki Namespace kopier Skript zu Git Repository

Beitrag von darksider3 » Mi Jan 23, 2013 12:33 am

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
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Mi Jan 23, 2013 11:22 am

Kleiner Hinweis: vielleicht solltest Du wenigstens data/media auch noch kopieren.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

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

Beitrag von darksider3 » Mi Jan 23, 2013 11:26 am

Joar, wäre angebracht...@todo^^

Mfg
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

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

Beitrag von fat-lobyte » Do Jan 24, 2013 9:43 pm

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)
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

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

Beitrag von darksider3 » Do Jan 24, 2013 10:06 pm

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
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

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

Beitrag von fat-lobyte » Do Jan 24, 2013 10:27 pm

Das könnte funktionieren. Danke für den Tip!
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

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

Beitrag von darksider3 » So Jan 27, 2013 5:08 pm

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
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Antworten