Fryboyter

Hooks unter Mercurial

Gestern hatte ich ja bereits einen Artikel veröffentlicht, der die Versionsverwaltung Mercurial betrifft. Das betreffende Projekt wurde bisher mit Git verwaltet. Hierbei gab es auch einige Hooks. Hiermit lassen sich zum Beispiel automatisch Befehle ausführen wenn ein neuer Commit hochgeladen wurde. Hierfür verwendet man den Hook “post-receive” wie ich es vor kurzem in einem Beitrag beschrieben habe. Zu diesem hat Tux auch einen Kommentar abgegeben, dass dies zum Beispiel auch mit Mercurial möglich ist.

An sich absolut korrekt, aber entweder ist die Dokumentation verbesserungswürdig oder ich stand auf der Leitung. Ich gehe an der Stelle mal von letzterem aus.

Unter https://www.mercurial-scm.org/wiki/Hook wird das ganze beschrieben. Jedes mal wenn ich einen Commit einpflege, soll ein Hook ausgeführt werden. Also habe ich in der Konfigurationsdatei hgrc folgendes eintragen.

[hooks]
commit = /pfad/zur/Datei/commithook

Unter /pfad/zur/Datei/ habe ich dann die Datei commithook angelegt und dort eben das Script eingetragen, dass ausgeführt werden soll. Anschließend habe ich die Datei ausführbar gemacht.

Es hat aber nicht funktioniert. Die Commits sind zwar angekommen, der Hook wurde aber nicht ausgeführt. Nach etwas Google-Fu habe ich dann auch gemerkt wieso. Der Commit-Hook funktioniert scheinbar nur, wenn man den Commit direkt im Repository macht. Nicht jedoch wenn man diesen per push einträgt.

Man muss daher in die Datei hgrc folgendes eintragen.

[hooks]
changegroup = /pfad/zur/Datei/commithook

Damit wird der Hook dann auch immer bei einem Commit ausgeführt.

OSBN | Allgemein

Git zu Mercurial konvertieren

Oft kommt es vor, dass jemand von einer Versionsverwaltung zu Git wechselt. Ab und zu kommt es aber auch vor, dass jemand von Git auf eine andere Lösung wechseln will. Kürzlich hatte ich solch eine Anfrage. Gewünscht war Mercurial.

Das betreffende Git-Repository war noch recht frisch aber es gab bereits Commits im niedrigen dreistelligen Bereich. Zu viele um diese in Mercurial manuell anzulegen.

Was aber gar nicht nötig ist. Mercurial bietet die Möglichkeit der Konvertierung an.

Nehmen wir einmal an im Home-Verzeichnis gibt es das Verzeichnis repository. In diesem befindet sich das Verzeichnis blog.git in welchem das Git-Repository vorhanden ist.

Als erstes erzeugt man im Verzeichnis repository das Unterverzeichnis blog.hg und welchselt in dieses. Dort erzeugt man dann mittels “hg init” ein Mercurial-Repository. Hierbei wird das Verzeichnis .hg erstellt. In diesem erzeugt man die Datei hgrc mit folgendem Inhalt.

[extensions]
hgext.convert=

Hiermit aktiviert man die Erweiterung mit der man die Konvertierung vornehmen kann.

Nun führt man im Verzeichnis blog.hg folgenden Befehl aus.

hg convert --datesort ~/repository/blog.git ~/repository/blog.hg

Das ganze dauert dann etwas. Aber wenn alles geklappt hat, sollte man ein Mercurial-Repository mit allen Commits, Dateien usw. wie im Git-Repository erhalten. Sieht man sich das Verzeichnis blog.hg an, sieht man allerdings weiterhin nur das Unterverzeichnis .hg. Das Problem behebt man in dem man den Befehl “hg update” ausführt. Sieht man sich danach das Verzeichnis blog.hg an sieht man auch die ganzen Dateien die man ursprünglich zum Git-Repository hinzugefügt hat.

OSBN | Allgemein

Hugo updaten

Hugo ist auf meine Webspace nicht von Haus aus installiert. Daher muss ich neue Versionen manuell installieren. Um mir dies zu erleichtern habe ich mir ein kleines Script gebaut.

#!/bin/bash
BIN_DIR=$HOME/bin
CUR_VERSION="$("$BIN_DIR"/hugo version 2>/dev/null | cut -d'v' -f2 | cut -c 1-6)"
NEW_VERSION=$(curl --silent "https://api.github.com/repos/gohugoio/hugo/tags" | jq -r '.[0].name' | tr -d v)

echo "Hugo:  Aktuelle Version: $CUR_VERSION => Neue Version: $NEW_VERSION"

if ! [ "$NEW_VERSION" = "$CUR_VERSION" ]; then

  curl -L --output hugo.tar.gz "https://github.com/gohugoio/hugo/releases/download/v${NEW_VERSION}/hugo_${NEW_VERSION}_Linux-64bit.tar.gz"
  tar -C "${BIN_DIR}" -xvzf hugo.tar.gz hugo
  rm hugo.tar.gz
else
    echo "Die aktuelle Version von Hugo ist bereits installiert"
fi

Hiermit wird geprüft, ob die aktuelle Version die auf Github angeboten wird, aktueller ist als die, die auf dem Webspace vorhanden ist. Wenn ja, wird die aktuelle Version von Github heruntergeladen und auf dem Webspace gespeichert.

OSBN | Allgemein

Datum in Sublime Text einfügen

Erstellt man einen Artikel mit Hugo gibt man in der Markdown-Datei das Datum in Form von 2019-04-27T22:18:13+0200 an. Im Gegensatz zu Jörg nervt mich das aber ziemlich.

Daher habe ich mir überlegt, wie ich die Eingabe automatisieren kann. Für meinen bevorzugten Editor Sublime Text gibt es hierfür das Plugin InsertDate. Nach der Installation wählt man die richtige Zeitzone aus. Danach legen man sich am besten noch einen Shortcut an, mit dem man das Datum einfügt. Hierfür wählt man im Menü “Preferences” den Punkt “Key Bindings” aus. Im rechten Fenster trägt man nun folgenden Code zwischen die eckigen Klammern ein und speichert die Datei.

{ "keys": ["shift+f5"], "command": "insert_date", "args": {"format": "%Y-%m-%dT%H:%M:%S%z"} },

Anstelle von shift+f5 kann man auch einen andere Tastenkombination verwenden. Von nun an fügt man mit dem definierten Shortcut das aktuelle Datum inklusive Uhrzeit und der Differenz zu UTC im ISO 8601 Format ein.

OSBN | Allgemein

Auf Kompletten Feed Umgestellt

Vor ein paar Tagen wurde ich gefragt, ob ich den OSBN-Feed nicht so ändern kann, dass dieser den kompletten Artikel anzeigt. Der Wunsch ist mir Befehl.

Hierzu habe ich einfach im Theme-Verzeichnis von Hugo im Unterverzeichnis layouts/_default die Datei rss.xml mit folgendem Inhalt angelegt (dieser entspricht dem Standard-Template des Feeds).

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>{{ if eq  .Title  .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
    <link>{{ .Permalink }}</link>
    <description>Recent content {{ if ne  .Title  .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
    <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
    <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
    <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
    <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
    <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
    <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
    {{ with .OutputFormats.Get "RSS" }}
        {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
    {{ end }}
    {{ range .Pages }}
    <item>
      <title>{{ .Title }}</title>
      <link>{{ .Permalink }}</link>
      <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
      {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
      <guid>{{ .Permalink }}</guid>
      <description>{{ .Summary | html }}</description>
    </item>
    {{ end }}
  </channel>
</rss>

Damit nun der komplette Artikel angezeigt wird, habe ich die Zeile <description>{{ .Summary | html }}</description> auf <description>{{ .Content | html }}</description> geändert. Das war es schon. Die Änderung gilt für die komplette Seite und nicht nur für die Kategorie OSBN.

OSBN | Allgemein