Table of Contents
CVS to Git Migration for PLD Linux using GitHub
PLD Linux Github Organization is currently used to mirror git.pld-linux.org
This page describes migration of PLD Linux CVS Packages repository to github.
Organization in github as been done: https://github.com/pld-linux, later referred as Organization.
PLD Developers wishing to join Organization, should create account in GitHub, and Organization Owners will add them to Team named Developers.
Each developer should set their <login>@pld-linux.org as e-mail alias in GitHub (Account Settings→Email Addresses)
Migration Tasks
Migration test was done using cvs2git, that is not incremental (but semi-incremental achieved with rsync.log).
- full git cvsimport (using local cvs files copy): ~470 minutes
 - Secondary git cvsimport time (local cvs mirror): ~580 minutes
 - git cvsimport size: 4.8G
 - git root bare size: 3.2G
 - imported users will be login@pld-linux.org in authors file, people can claim their identities by adding their @pld emails to their accounts in github
 
You can clone from test import at carme:~glen/git/pld-git/git-import (via ssh)
Scripts used to do the import: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/git-migration/
git cvs convert todo
cvsps to understand cvsnt “Commit Identifier”. FIXED: cvsps patched- fix problematic packages:
libghttp, cvsps loops on libghttp-fixlocale.patch (two revisions 1.1)kernel- cvsps loops on kernel-ppc.configfltk2,classpath,joomla- vim : spec.vim:
cvs checkout: Skipping `$Log$' keyword due to excessive comment leader. 
 latin2 commit messages. Test packages: mutt, audiocut. RESOLVED: see cvs2git.optionscvs branches not importedTest package: audiocut. FIXEDunnamed branches will be converted to tags:. DONEcvs-<BRANCHPOINT>. test packages: nagios-alert-jabber, nagios-plugins * <del>trim $Log:$ on importing?- filter out imported archives: .tar, .gz, etc?
- http://pld.pastebin.com/xF5yzZAv - .tar, .gz files
 - http://pld.pastebin.com/JT9RQJ2s - “extensions” from cvs server
 - maybe these files should be removed in cvs server? they are still present in “old” SOURCES.old if you really want some
 
 - maybe we should set Comitter to value other then Author during conversion, so could later identify cvs and git commits.
 remove %changelog from old commits. DONE- what to fill to .git/description? just package name?
 - what to do with removed packages. suggestion: clone them to
pld-linux-obsoleteorganization in github and drop inpld-linux - ideas: register pld-projects for storage of non-packages from pld cvs/svn (geninitrd, rc-scripts, …)
 
GitHub Related Tasks
We decided to try github hosting:
- supports organizations
 - each dev is responsible for maintaining his own account (public key upload, password resets etc. handled by a web panel)
 - has group-based ACL
 - has commit hooks (can write our own and github will then enable them for all users)
 - sent a request asking if they'd agree to host us for free, we have a green light
 - github has polish interface translations, most devs should be happy? :D
 - what to fill to Summary and URL fields (parse from .spec?)
 automate creation of new packages via GitHub API. DONE:pldpkg.pycurrently can add and create repos.
Unsorted
- builder script
- rewrite from scratch or patch current?
the patched version: https://github.com/draenog/PLDbuilder - look into fedpkg?
 - git clone on carme should use –reference to local git copy to save diskspace
 
 - pld builder automation (building, auto tagging)
minimal changes required; see: https://github.com/draenog/pld-builder.new - restricting who can delete tags (auto-xxx tags should not be altered by humans)
 - $log: keyword support for .spec, also $Revision: and $Date:
- $Revision and $Date dropped
 - %changelog generated by git log in builder script (implemented)
 - ciabot, mailinglist notification, commit acl rules
 
 
Changes to Developer
Adoption of new commit message formatting rules
| Action | Before (CVS) | After (Git) | 
|---|---|---|
| add new package |  ../builder -a PKG or cvs add PKGDIR  | Org Owner in github has to create it | 
| rename package | send rename request to cvsadmin@ | rename in github yourself | 
| delete package | remove all sources from cvs |  package should be pushed to pld-linux-obsolete and Org Owner in github has to delete it in pld-linux  | 
	
| update from remote |  cvs up  |  git pull --rebase  | 
	
| checkin single file |  cvs ci file.foo  |  git add file.foo; git commit; git push  | 
	
| checkin all changes |  cvs ci  |  git commit -a; git push  | 
	
| find string from all packages |  grep -r oauth_ SPECS  | use web search. Sample Search | 
| list all pkgs |  cvs ls packages  | use json api. sample | 
| see old patches |  look into Attic/ in cvsweb  |  git log --pretty=format: --name-only --diff-filter=D  | 
	
| restore old removed file |  look into Attic/ in cvsweb and cvs up -jHEAD -j$DEAD_REV and commit  |  1. get sha: git log -- FILE 2. get contents: git show HASH:FILE  | 
	
Other Readling:
fedpkg
commands that work and have alternatives
 ./builder -g PACKAGE  |  fedpkg co PACKAGE; cd PACKAGE; fedpkg sources  | 
	
 ./builder -ba PACKAGE  |  fedpkg local  | 
	
 ./compile.sh PACKAGE  |  fedpkg compile --short-circuit  | 
	
 ./repackage.sh PACKAGE  |  fedpkg install --short-circuit  | 
	
 ./check-unused-files.py PACKAGE  |  fedpkg unused-patches  | 
	
 cvs diff  |  fedpkg diff  | 
	
 ./builder -bs PACKAGE  |  fedpkg srpm  | 
	
 rm -f *; cvs up  |  fedpkg clean  | 
	
todo
- switch _builddir, _srpmdir and _rpmdir to packages/NAME when invoked from fedpkg?