Complete Linux history in git

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

 



I have written a small python script that fetches the
linux archive at
git://git.kernel.org/pub/scm/linux/kernel/git/nico/archive.git,
applies patches up to 2.4.0 and commits every patch to git
with a message and a tag.
>From there it should be easy to merge old-2.6-bkcvs and
the latest Linux git and have a git archive with the complete
history.

To run it you have to download some patches from
http://gonsolo.de/kernel_history/ and start the script
from the same directory.

It is not perfect, you have to press enter a few times when
patches do not apply. I would be happy to receive feedback
or patches.

After running the script there is a git repository at "kernel" which
is approximately 1GB! After running "git gc" (which takes a long time!)
the pack file is under 100MB, IIRC.

Next step would be to download old-2.6-bkcvs repository from
git.kernel.org and merge/rebase (don't know).

Gonsolo
#!/usr/bin/python

# Fetch the git repository for kernels up to 1.0.
# Apply all patches up to 2.4 and commit to the repository.
# From here old-2.6-bkcvs can be applied.
# Some fixes are necessary these have to be downloaded seperately.

import os, shutil, urllib

# The local git directory
local='kernel/'

# Where to fetch patches
remote='http://www.kernel.org/pub/linux/kernel/'

# This can be a local directory, too
#remote= 'file:///your_local_patch_dir/www.kernel.org/pub/linux/kernel/'

def apply( patch ):
	os.system( 'bzcat ' + patch + ' | patch -s -p1 -d ' + local )
	os.remove( patch )

def retrieve_apply( dir, patch ):
	print 'apply ' + patch
	urllib.urlretrieve( dir + patch, patch )
	apply( patch )

def commit( msg ):
	os.system( 'cd ' + local + ' && git add * && git commit -q -a -m' + msg )
	os.system( 'cd ' + local + ' && git tag ' + msg )

def apply_patches(dir,begin,end,patchbase,commitbase):
	for i in range(begin,end):
		patch=patchbase + str(i) + '.bz2'
		retrieve_apply( dir, patch )
		commit( commitbase + str(i) )

def v10():
	print 'v10'
	dir=remote + 'v1.0/'

	apply_patches(dir,1,7,'patch','v1.0.')

def v11():
	print 'v11'
	dir=remote + 'v1.1/'
	patch='1.0.6-1.1.0.diff.bz2'
	retrieve_apply( dir, patch )
	commit( 'v1.1.0' )

	apply_patches(dir,1,46,'patch','v1.1.')

	# patch 45 forgets to remove files
	os.system( 'cd ' + local + ' && cat ../fix.1 | patch -s -p1' )
	commit( 'v1.1.45fix1' )

	apply_patches(dir,46,54,'patch','v1.1.')

	# patch54 is screwed
	#os.remove( local + 'fs/binfmt_elf.c' )

	apply_patches(dir,54,75,'patch','v1.1.')

	# patch75 is screwed
	os.remove( local + 'fs/msdos/mmap.c' )
	commit( 'v1.1.74a: fixup' )

	apply_patches(dir,75,77,'patch','v1.1.')

	# patch77 is whitespaced damaged
	os.system( 'cd ' + local + ' && cat ../fix.2 | patch -s -p1' )
	commit( 'v1.1.76a: fixup' )

	apply_patches(dir,77,96,'patch','v1.1.')

	# 1.1 patches add '-N' to diff
	os.system( 'cd ' + local + ' && cat ../fix.3 | patch -s -p1' )
	commit( 'v1.1.95fix2' )

def v12():
	print 'v12'
	dir=remote + 'v1.2/'

	patch='v1.1.95-1.2.0.patch.bz2'
	retrieve_apply( dir, patch )
	commit( 'v1.2.0' )

	apply_patches(dir,1,11,'patch-1.2.','v1.2.')

def v13():
	print 'v13'
	dir=remote + 'v1.3/'

	# found no patch for upgrade
	os.system( 'cat 1.2.10-1.3.0 | patch -s -p1 -d ' + local )
	commit( 'v1.3.0' )

	apply_patches(dir,1,101,'patch-1.3.','v1.3.')

	# Fix 1.3 patches
	os.system( 'cd ' + local + ' && cat ../fix.4 | patch -s -p1' )
	commit( 'v1.3.100fix3' )

	apply_patches(dir,1,15,'patch-pre2.0.','pre2.0.')

	# Fix pre2 patches
	os.system( 'cd ' + local + ' && cat ../fix.5 | patch -s -p1' )
	commit( 'v2.0fix4' )

def v20():
	print 'v20'
	dir=remote + 'v2.0/'
	
	apply_patches(dir,1,41,'patch-2.0.','v2.0.')

def v21():
	print 'v21'
	dir=remote + 'v2.1/'

	os.system( 'cd ' + local + ' && git checkout v2.0.21' )
	
	retrieve_apply( dir, 'patch-2.0.21-2.1.0.bz2')
	commit( 'v2.1.0' )

	apply_patches(dir,1,133,'patch-2.1.','v2.1.')
	apply_patches(dir,1,10,'patch-2.2.0-pre','v2.2.0-pre')

	retrieve_apply( dir, 'patch-2.2.0-final.bz2')
	commit( 'v2.2.0-final' )

def v22():
	print 'v22'
	dir=remote + 'v2.2/'

	apply_patches(dir,1,27,'patch-2.2.','v2.2.')

def v23():
	print 'v23'
	dir=remote + 'v2.3/'

	os.system( 'cd ' + local + ' && git checkout v2.2.8' )
	
	retrieve_apply( dir, 'patch-2.2.8-to-2.3.0.bz2')
	commit( 'v2.3.0' )

	apply_patches(dir,1,52,'patch-2.3.','v2.3.')
	apply_patches(dir,1,10,'patch-2.3.99-pre','v2.3.99-pre')

def v24():
	print 'v24'
	dir=remote + 'v2.4/old-test-kernels/'

	apply_patches(dir,1,13,'patch-2.4.0-test','v2.4.0-test')

	retrieve_apply( dir, 'patch-2.4.0-prerelease.bz2' )
	commit( 'v2.4.0-prerelease' )

	retrieve_apply( dir, 'prerelease-to-final.bz2' )
	commit( 'v2.4.0' )


if os.path.exists( local ):
	shutil.rmtree( local )
os.system( 'git clone git://git.kernel.org/pub/scm/linux/kernel/git/nico/archive.git ' + local )
v10()
v11()
v12()
v13()
v20()
v21()
v22()
v23()
v24()


[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux