tech-repository archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Parallel git and cvs workflow with git-cvsexportcommit



Hi,

I've been using git for pkgsrc development since the beginning (which for me is sometime 2013).
After preparing my changes in git I manually transferred those to cvs with "patch" and "cvs commit".

After some discussions at pkgsrcCon I came across git-cvsexportcommit [1].
It was just tested with the update to nano and worked well.

This command simplifies my workflow quite a bit, so let me explain my setup - maybe this is of interest to others.


### Abstract

You'll need two parallel copies of the tree: one using git and one using cvs.
To get changes from git into cvs it uses git-cvsexportcommit.
Git has many benefits like local commits, easy branching, atomic commits across multiple files, etc.
I also like to prepare my commit messages and review them before setting them in stone in the eternal history.


### Environment

To setup a basic working environment I use configuration like follows.

Add to ~/.bash_profile:

	export CVSEDITOR=$EDITOR
	export CVSROOT=$LOGNAME%cvs.NetBSD.org@localhost:/cvsroot
	export CVS_RSH=ssh

Add to ~/.cvsrc 

	# recommended CVS configuration file from the pkgsrc guide
	cvs -q -z2
	checkout -P
	update -dP
	diff -upN
	rdiff -u
	release -d


### CVS

get your cvs tree:

	mkdir ~/cvs ~/tmp
	cd ~/cvs
	cvs checkout pkgsrc

### GIT

checkout Jörgs git conversion [2]:

	cd ~/tmp
	git clone https://github.com/jsonn/pkgsrc.git

### bootstrap

the git tree will be your working tree:

	cd ~/tmp/pkgsrc/bootstrap
	./bootstrap --unprivileged

add to ~/.bash_profile

	export PATH="~/pkg/bin:~/pkg/sbin:$PATH"

### create your change

as an example let's do a simple update of nano:

	cd ~/tmp/pkgsrc/editors/nano

make changes and test them:

	$EDITOR Makefile
	bmake package
	...

stage your changes and commit:

	git add Makefile distinfo PLIST
	git commit

you now get to review your change as one entitiy, including the commit message:

	git show -1
	
```
commit 3b861ca6563af68aa3c175ebae151d3870c9b5d2
Author: Sebastian Wiedenroth <wiedi%frubar.net@localhost>
Date:   Wed Jul 8 22:59:39 2015 +0200

    Update nano to 2.4.2
    
    2015.07.05 - GNU nano 2.4.1 "Portorož" is released.  This release
    		includes several fixes, including the ability to resize
    		when in modes other than the main editing window,
    		proper displaying of invalid UTF-8 bytes, new syntax
    		definitions for Elisp, Guile, and PostgreSQL, and
    		better display of shortcuts in the help menu and file
    		browser.  Thanks for your patience and using nano!

diff --git a/editors/nano/Makefile b/editors/nano/Makefile
index 62fb2c1..c2a4b12 100644
--- a/editors/nano/Makefile
+++ b/editors/nano/Makefile
@@ -1,10 +1,10 @@
 # $NetBSD: Makefile,v 1.46 2015/06/05 01:32:38 wiedi Exp $
 
-DISTNAME=	nano-2.4.1
+DISTNAME=	nano-2.4.2
 CATEGORIES=	editors
 MASTER_SITES=	http://www.nano-editor.org/dist/v2.4/
 
-MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
+MAINTAINER=	wiedi%frubar.net@localhost
 HOMEPAGE=	http://www.nano-editor.org/
 COMMENT=	Small and friendly text editor (a free replacement for Pico)
 LICENSE=		gnu-gpl-v3
diff --git a/editors/nano/PLIST b/editors/nano/PLIST
index 7d4f944..1ecfdd4 100644
--- a/editors/nano/PLIST
+++ b/editors/nano/PLIST
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.18 2015/06/05 01:32:38 wiedi Exp $
+@comment $NetBSD$
 bin/nano
 bin/rnano
 info/nano.info
@@ -50,10 +50,12 @@ share/nano/cmake.nanorc
 share/nano/css.nanorc
 share/nano/debian.nanorc
 share/nano/default.nanorc
+share/nano/elisp.nanorc
 share/nano/fortran.nanorc
 share/nano/gentoo.nanorc
 share/nano/go.nanorc
 share/nano/groff.nanorc
+share/nano/guile.nanorc
 share/nano/html.nanorc
 share/nano/java.nanorc
 share/nano/javascript.nanorc
@@ -70,6 +72,7 @@ share/nano/patch.nanorc
 share/nano/perl.nanorc
 share/nano/php.nanorc
 share/nano/po.nanorc
+share/nano/postgresql.nanorc
 share/nano/pov.nanorc
 share/nano/python.nanorc
 share/nano/ruby.nanorc
diff --git a/editors/nano/distinfo b/editors/nano/distinfo
index 6b372a5..3420686 100644
--- a/editors/nano/distinfo
+++ b/editors/nano/distinfo
@@ -1,6 +1,6 @@
 $NetBSD: distinfo,v 1.20 2015/06/05 01:32:38 wiedi Exp $
 
-SHA1 (nano-2.4.1.tar.gz) = 422958cb700cc8cedc9a6b5ec00bf968c0fa875e
-RMD160 (nano-2.4.1.tar.gz) = 84bd54e50b5e8c6457d983dc7ef730b5a0303bf8
-Size (nano-2.4.1.tar.gz) = 1890805 bytes
+SHA1 (nano-2.4.2.tar.gz) = bcf2bb3fcc04874cb38c52cfd8feebce61dd5e0a
+RMD160 (nano-2.4.2.tar.gz) = 6a3d0569740c223230af6ae88f8ef0797402c4c2
+Size (nano-2.4.2.tar.gz) = 1898633 bytes
 SHA1 (patch-configure) = 3a63b02a39000d5a15087739648b82e999d14f56

```

You can take this diff and apply it to different systems for testing. This is very easy with git.
Once you are happy you can commit to CVS.

### commiting

	cd ~/tmp/pkgsrc/
	git cvsexportcommit -w ~/cvs/pkgsrc/ -pcv 3b861ca6563af68aa3c175ebae151d3870c9b5d2

This will commit (-c) if the change with the id 3b861ca6563af68aa3c175ebae151d3870c9b5d2 applies cleanly (-p for paranoid).

Keepking CHANGES and TODO up to date:

	~/cvs/pkgsrc/editors/nano
	bmake changes-entry
	cd ../../doc
	cvs diff
	cvs commit CHANGES-2015

The reason to not prepare this in the git commit is that the CHANGES file is updated very frequently and will conflict with the strict settings used with cvsexportcommit.

### keeping both trees updated

before starting a new change update your git tree:

	git pull
	
As you now have git you can also rebase easily onto more recent changes from upstream.

Before commiting update your cvs tree:

	cvs update -d


And thats it. Comments welcome.

Best regards,
Sebastian


[1] https://www.kernel.org/pub/software/scm/git/docs/git-cvsexportcommit.html
[2] https://github.com/jsonn/pkgsrc



Home | Main Index | Thread Index | Old Index