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

Re: [PATCH 1/2] Convert linux source package to source format 3.0 (quilt)



On Mon, 2012-06-04 at 22:49 +0100, Ben Hutchings wrote:
> Changes from v1:
> - Moved the compression changes to a second patch
> - Cleaned up the 'orig' commands to use the proper exclude option
> - Restored the source stamp target in rules.real, which now checks
>   that all patches are applied
> 
> Not shown in the diff: debian/patches/series-all is renamed to
> debian/patches/series.
> 
> I've verified that package building doesn't modify the source directory
> (at least on amd64) and results in the same binary package contents.

So, does anyone have a problem with this?  It would be really nice to
have a more 'normal' looking package that more developers can easily
work with (not just through debian/bin/test-patches).

The following xz compression also reduces a source+binary-indep upload
size by about 20%, which is nice for those of us with low upstream
bandwidth.

$ du --total linux-2.6_3.2.19-1.{diff.gz,dsc} linux-2.6_3.2.19.orig.tar.gz linux-*_3.2.19-1_all.deb
5944	linux-2.6_3.2.19-1.diff.gz
96	linux-2.6_3.2.19-1.dsc
96176	linux-2.6_3.2.19.orig.tar.gz
6204	linux-doc-3.2_3.2.19-1_all.deb
2844	linux-manual-3.2_3.2.19-1_all.deb
1148	linux-patch-debian-3.2_3.2.19-1_all.deb
75048	linux-source-3.2_3.2.19-1_all.deb
192	linux-support-3.2.0-2_3.2.19-1_all.deb
187652	total
$ du --total linux_3.2.19-2.{debian.tar.xz,dsc} linux_3.2.19.orig.tar.xz linux-*_3.2.19-2_all.deb
2148	linux_3.2.19-2.debian.tar.xz
96	linux_3.2.19-2.dsc
64164	linux_3.2.19.orig.tar.xz
6204	linux-doc-3.2_3.2.19-2_all.deb
2848	linux-manual-3.2_3.2.19-2_all.deb
75076	linux-source-3.2_3.2.19-2_all.deb
192	linux-support-3.2.0-2_3.2.19-2_all.deb
150728	total

Ben.

> Ben.
> 
> Index: debian/rules
> ===================================================================
> --- debian/rules	(revision 19080)
> +++ debian/rules	(working copy)
> @@ -43,7 +43,8 @@
>  TAR_ORIG = $(firstword $(wildcard ../$(TAR_ORIG_NAME)) $(wildcard ../orig/$(TAR_ORIG_NAME)))
>  
>  orig: $(DIR_ORIG)
> -	rsync --delete --exclude debian --exclude .svk --exclude .svn --link-dest=$(DIR_ORIG)/ -a $(DIR_ORIG)/ .
> +	rsync --delete --exclude /debian --exclude .svk --exclude .svn --link-dest=$(DIR_ORIG)/ -a $(DIR_ORIG)/ .
> +	QUILT_PATCHES='$(CURDIR)/debian/patches' quilt push --quiltrc - -a -q --fuzz=0
>  
>  $(DIR_ORIG):
>  ifeq ($(TAR_ORIG),)
> Index: debian/source/local-options
> ===================================================================
> --- debian/source/local-options	(revision 0)
> +++ debian/source/local-options	(revision 0)
> @@ -0,0 +1 @@
> +abort-on-upstream-changes
> Index: debian/source/format
> ===================================================================
> --- debian/source/format	(revision 19080)
> +++ debian/source/format	(working copy)
> @@ -1,2 +1,2 @@
> -1.0
> +3.0 (quilt)
>  
> Index: debian/bin/test-patches
> ===================================================================
> --- debian/bin/test-patches	(revision 19080)
> +++ debian/bin/test-patches	(working copy)
> @@ -55,36 +55,42 @@
>      dch -v "$version" --distribution UNRELEASED "Testing patches $*"
>  fi
>  
> -restrictfeature=
> +# Make new directory for patches
> +mkdir -p debian/patches/test
> +
> +# Ignore user's .quiltrc
> +alias quilt='quilt --quiltrc -'
> +
> +# Try to clean up any previous test patches
>  if [ "$featureset" = none ]; then
> -    series="series-all"
> +    while quilt top 2>/dev/null | grep -q ^test/; do
> +        quilt delete
> +    done
>  else
> -    series="series-${featureset}"
> +    sed -i '/^test\//d' debian/patches/series-${featureset}
>  fi
>  
> -# Copy all patches into a new directory
> +# Prepare a new directory for the patches
>  rm -rf debian/patches/test/
>  mkdir debian/patches/test
> -cp -t debian/patches/test/ "$@"
>  
> -# Try to clean up any test patches on exit, but also do it now just in case
> -sed -i '/^test\//d' debian/patches/"$series"
> -trap "sed -i '/^test\//d' debian/patches/\"$series\"" EXIT
> -
> -# Append to patch series
> -for patch in "$@"; do
> -    echo "test/$(basename "$patch")" >>debian/patches/"$series"
> -done
> -
>  # Regenerate control and included rules
>  rm debian/control debian/rules.gen
>  debian/rules debian/control-real && exit 1 || true
>  test -f debian/control
>  test -f debian/rules.gen
>  
> -# Clean and patch source
> +# Clean up old build; apply existing patches for featureset
>  debian/rules clean
>  debian/rules source
>  
> +# Apply the additional patches
> +for patch in "$@"; do
> +    patch_abs="$(readlink -f "$patch")"
> +    (cd "debian/build/source_${featureset}" && \
> +     quilt import -P "test/$(basename "$patch")" "$patch_abs" && \
> +     quilt push --fuzz=0)
> +done
> +
>  # Build selected binaries
>  fakeroot make -f debian/rules.gen binary-arch_"$arch"_"$featureset"_"$flavour"
> Index: debian/rules.real
> ===================================================================
> --- debian/rules.real	(revision 19080)
> +++ debian/rules.real	(working copy)
> @@ -60,37 +60,37 @@
>  $(BUILD_DIR)/config.$(ARCH)_$(FEATURESET)_$(FLAVOUR): $(KCONFIG)
>  	python debian/bin/kconfig.py '$@' $(KCONFIG) $(KCONFIG_OPTIONS)
>  
> -$(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: SOURCE_DIR=$(BUILD_DIR)/source
> +define copy_source
> +mkdir -p '$(1)'
> +cp -al $(filter-out debian .pc .svk .svn, $(wildcard * .[^.]*)) '$(1)'
> +endef
> +
>  $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: DIR = $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION)
>  $(BUILD_DIR)/linux-source-$(UPSTREAMVERSION).tar.bz2: $(STAMPS_DIR)/source
>  	rm -rf '$@' '$(DIR)'
> -	cp -al '$(SOURCE_DIR)' '$(DIR)'
> +	$(call copy_source,$(DIR))
>  	chmod -R u+rw,go=rX '$(DIR)'
>  	cd '$(BUILD_DIR)'; tar -cjf 'linux-source-$(UPSTREAMVERSION).tar.bz2' 'linux-source-$(UPSTREAMVERSION)'
>  	rm -rf '$(DIR)'
>  
>  define patch_cmd
> -cd '$(DIR)' && QUILT_PATCHES='$(CURDIR)/debian/patches' QUILT_SERIES=series-$(1) quilt push --quiltrc - -a -q --fuzz=1
> +cd '$(DIR)' && QUILT_PATCHES='$(CURDIR)/debian/patches' QUILT_SERIES=series-$(1) quilt push --quiltrc - -a -q --fuzz=0
>  endef
>  
> -$(STAMPS_DIR)/source: SOURCE_FILES = $(filter-out debian, $(wildcard * .[^.]*))
> -$(STAMPS_DIR)/source: DIR = $(BUILD_DIR)/source
>  $(STAMPS_DIR)/source:
> -	rm -rf '$(DIR)'
> -	mkdir -p '$(DIR)'
> -	cp -al $(SOURCE_FILES) '$(DIR)'
> -	$(call patch_cmd,all)
> +	test -d .pc
> +	set +e; quilt unapplied --quiltrc - >/dev/null && echo 'Patch series not fully applied'; test $$? -eq 1
>  	@$(stamp)
>  
>  $(STAMPS_DIR)/source_$(FEATURESET): SOURCE_DIR=$(BUILD_DIR)/source
>  $(STAMPS_DIR)/source_$(FEATURESET): DIR=$(BUILD_DIR)/source_$(FEATURESET)
>  $(STAMPS_DIR)/source_$(FEATURESET): $(STAMPS_DIR)/source
> +	mkdir -p '$(BUILD_DIR)'
>  	rm -rf '$(DIR)'
>  ifeq ($(FEATURESET),none)
> -	ln -s source '$(DIR)'
> +	ln -s '$(CURDIR)' '$(DIR)'
>  else
> -	cp -al '$(SOURCE_DIR)' '$(DIR)'
> -	rm -rf '$(DIR)/.pc'
> +	$(call copy_source,$(DIR))
>  	$(call patch_cmd,$(FEATURESET))
>  endif
>  	@$(stamp)
> @@ -136,13 +136,12 @@
>  	python debian/bin/buildcheck.py $(DIR) $(ARCH) $(FEATURESET) $(FLAVOUR)
>  	@$(stamp)
>  
> -$(STAMPS_DIR)/build-doc: SOURCE_DIR=$(BUILD_DIR)/source
>  $(STAMPS_DIR)/build-doc: DIR=$(BUILD_DIR)/build-doc
>  $(STAMPS_DIR)/build-doc: $(STAMPS_DIR)/source
>  	rm -rf $(DIR)
> -	mkdir $(DIR)
> -	+$(MAKE_CLEAN) -C $(SOURCE_DIR) O='$(CURDIR)/$(DIR)' xmldocs
> -	+$(MAKE_CLEAN) -C $(SOURCE_DIR) O='$(CURDIR)/$(DIR)' htmldocs mandocs
> +	mkdir -p $(DIR)
> +	+$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' xmldocs
> +	+$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' htmldocs mandocs
>  	@$(stamp)
>  
>  install-base:
> @@ -164,14 +163,13 @@
>  
>  install-doc: PACKAGE_NAME = linux-doc-$(VERSION)
>  install-doc: DIR = $(BUILD_DIR)/build-doc
> -install-doc: SOURCE_DIR = $(BUILD_DIR)/source
>  install-doc: PACKAGE_DIR = debian/$(PACKAGE_NAME)
>  install-doc: OUT_DIR = $(PACKAGE_DIR)/usr/share/doc/$(PACKAGE_NAME)
>  install-doc: DH_OPTIONS = -p$(PACKAGE_NAME)
>  install-doc: $(STAMPS_DIR)/build-doc
>  	dh_prep
>  	mkdir -p $(OUT_DIR)
> -	cp -a $(addprefix $(SOURCE_DIR)/, CREDITS MAINTAINERS README REPORTING-BUGS Documentation) $(OUT_DIR)
> +	cp -a CREDITS MAINTAINERS README REPORTING-BUGS Documentation $(OUT_DIR)
>  	rm -rf $(OUT_DIR)/Documentation/DocBook
>  	cd $(DIR)/Documentation/DocBook; \
>  	find * -name '*.html' -print \
> @@ -280,7 +278,6 @@
>  
>  install-libc-dev_$(ARCH): PACKAGE_NAME = linux-libc-dev
>  install-libc-dev_$(ARCH): DH_OPTIONS = -p$(PACKAGE_NAME)
> -install-libc-dev_$(ARCH): SOURCE_DIR = $(BUILD_DIR)/source
>  install-libc-dev_$(ARCH): DIR = $(BUILD_DIR)/build-libc-dev
>  install-libc-dev_$(ARCH): OUT_DIR = debian/$(PACKAGE_NAME)/usr
>  install-libc-dev_$(ARCH):
> @@ -288,9 +285,9 @@
>  	dh_testroot
>  	dh_prep
>  	rm -rf '$(DIR)'
> -	mkdir $(DIR)
> -	+$(MAKE_CLEAN) -C $(SOURCE_DIR) O='$(CURDIR)/$(DIR)' headers_check ARCH=$(KERNEL_ARCH)
> -	+$(MAKE_CLEAN) -C $(SOURCE_DIR) O='$(CURDIR)/$(DIR)' headers_install ARCH=$(KERNEL_ARCH) INSTALL_HDR_PATH='$(CURDIR)'/$(OUT_DIR)
> +	mkdir -p $(DIR)
> +	+$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' headers_check ARCH=$(KERNEL_ARCH)
> +	+$(MAKE_CLEAN) O='$(CURDIR)/$(DIR)' headers_install ARCH=$(KERNEL_ARCH) INSTALL_HDR_PATH='$(CURDIR)'/$(OUT_DIR)
>  
>  	rm -rf $(OUT_DIR)/include/drm $(OUT_DIR)/include/scsi
>  	find $(OUT_DIR)/include \( -name .install -o -name ..install.cmd \) -execdir rm {} +
> Index: debian/changelog
> ===================================================================
> --- debian/changelog	(revision 19080)
> +++ debian/changelog	(working copy)
> @@ -16,7 +16,8 @@
>    * linux-patch-debian: Remove; it is no longer necessary for GPL compliance
>      and does not work with our current patch management
>    * test-patches: Recognise the rt featureset automatically
> -  * Convert patch system to quilt, except for the 'orig' patch series
> +  * Convert source package format to 3.0 (quilt)
> +    - Convert patch system to quilt, except for the 'orig' patch series
>  
>   -- Ben Hutchings <ben@decadent.org.uk>  Sat, 02 Jun 2012 20:31:53 +0100
>  
> 
> 

-- 
Ben Hutchings
I haven't lost my mind; it's backed up on tape somewhere.

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: