Go get and Fork – script helper workaround

Why

If you write some Golang code, from my point of view, one of biggest pitfall of this language is dependency management.

At the beginning, get library directly from git repository seems a good idea, but between package rules, versions, your pull requests, it becomes a mess quickly.

Some sources on this problem:
Article: Forking Golang repositories on GitHub and managing the import path

StackOverflow : Using forked package import in Go

My workaround

Then, why not automate this procedure ?
In your .bashrc add:

function gofork() {
  if [ $# -ne 2 ] || [ -z "$1" ] || [ -z "$2" ]; then
    echo 'Usage: gofork yourFork originalModule'
    echo 'Example: golang github.com/YourName/go-contrib github.com/heirko/go-contrib'
    return
  fi
   echo "Go get fork $1 and replace $2 in GOPATH: $GOPATH"
   go get $1
   go get $2
   currentDir=$PWD
   cd $GOPATH/src/$1
   remote1=$(git config --get remote.origin.url)
   cd $GOPATH/src/$2
   remote2=$(git config --get remote.origin.url)
   cd $currentDir
   rm -rf $GOPATH/src/$2
   mv $GOPATH/src/$1 $GOPATH/src/$2
   cd $GOPATH/src/$2
   git remote add their $remote2
   echo Now in $GOPATH/src/$2 origin remote is $remote1
   echo And in $GOPATH/src/$2 their remote is $remote2
   cd $currentDir
}

export -f gofork

This command do

  • a ‘go get’ on source and fork repositories
  • extract remote urls
  • replace source code by fork
  • add source remote to your fork repository in case you want pull from source

You can call this script from command line or directly from a script like this:

gofork github.com/heralight/baloo gopkg.in/h2non/baloo.v2

DEBIAN: Créer des paquets debian vides pour palier aux problèmes de dépendances

Comme beaucoup, je suis sous Ubuntu.

Cet OS est très bien conçu, par contre certains paquets ont quelques fois des dépendances un peu farfelues, voir qui vous bouffent des ressources inutilement.

Si comme moi, vous n’utilisez pas le bluetooth, le supprimer est difficile.
Il faudrait, entre autre, se priver de unity-desktop…

Bref, fin du Blabla…

Pour forcer la suppression d’un paquet sans désinstaller les paquets en dépendant:

$ sudo dpkg -r --force-depends package

Par exemple:

$ sudo dpkg -r --force-depends rfkill gnome-bluetooth bluez bluez-alsa gnome-orca network-manager-pptp network-manager-pptp-gnome speech-dispatcher indicator-bluetooth

Maintenant vous avez plein de paquets cassés… pas bien Alexandre!

Pour remédier à ce problème, une solution consiste à installer des paquets résolvant ces dépendances perdues, mais ces derniers seront vides, en gros des « dummy packages ».

Pour créer ces paquets, vous devrez par exemple utiliser equivs-control et equivs-build ou mon script.

La commande:

$ ./gen-dummy-package.sh --install|i [packageName]+
# Par exemple:
$ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez

Le « -i » va effectuer une installation du paquet nouvellement créé.

Le script complet:

UBUNTU: corriger les bugs d’affichage de alpine