My fixes based on the latest git repo are available in the bugfixes branch of https://github.com/e7appew/debdelta.git.
My fixes based on the latest version in sid are represented in the attached debdiff patch.
diff -Nru debdelta-0.55/debdelta debdelta-0.55+nmu1/debdelta --- debdelta-0.55/debdelta 2014-12-01 04:31:13.000000000 +1100 +++ debdelta-0.55+nmu1/debdelta 2016-11-21 15:11:41.000000000 +1100 @@ -676,7 +676,14 @@ return join(v.split('%3a'),':') else: return v - + +def delta_base_name(pkg, old_ver, new_ver, arch, ext='.debdelta'): + assert(':' not in pkg) + return pkg + \ + '_' + version_mangle(old_ver) + \ + '_' + version_mangle(new_ver) + \ + '_' + arch + ext + def tempo(): TD = abspath(tempfile.mkdtemp(prefix='debdelta',dir=TMPDIR)) for i in 'OLD','NEW','PATCH' : @@ -2761,6 +2768,7 @@ "tries to guess the parameters used to compress, returns a string of options ; if check=True and it fails, returns False " par='' crc='' + thread='' z=tempfile.NamedTemporaryFile(suffix='.xz',delete=False) #unfortunately 'xz --list' does not work on pipes! shutil.copyfileobj(o,z) @@ -2779,6 +2787,8 @@ if par and par != a[15]: print " warning : this xz -- compressed file was compressed with variable blocks options ?! '%s' != '%s'" & (par,a[15]) par=a[15] + if not thread and a[12]=='cu': + thread='-T2' #print ' guessed par crc ',par,crc if crc: crc=crc.lower() @@ -2799,6 +2809,8 @@ w.append(par) if crc: w+=['-C',crc] + if thread: + w.append(thread) w.append('-') if VERBOSE > 2 : print ' Testing XZ options ',w w=subprocess.Popen(w,stdin=y.stdout,stdout=subprocess.PIPE,close_fds=True) @@ -2815,8 +2827,10 @@ return False if crc: crc=' -C '+crc + if thread: + thread=' '+thread os.unlink(z.name) - return par+crc + return par+crc+thread ########### helper sh functions for script, for delta_tar() @@ -3885,8 +3899,7 @@ continue assert( old['Package'] == pa and pa == new['Package'] ) - deltabasename = pa +'_'+ version_mangle(old['Version']) +\ - '_'+ version_mangle(new['Version']) +'_'+ar+'.debdelta' + deltabasename = delta_base_name(pa, old['Version'], new['Version'], ar) if 'Filename' in new: deltadirname=delta_dirname(os.path.dirname(new['Filename']),DIR) @@ -4693,13 +4706,13 @@ deb_path=string.join(deb_path[(thepoolindex):],'/') #try all possible variants of the filename - newdebs=[p.name+'_'+candidate_version+'_'+arch+'.deb', + newdebs=[p.shortname+'_'+candidate_version+'_'+arch+'.deb', os.path.basename(deb_uri)] if ':' in candidate_version: a=candidate_version.split(':') - newdebs.append(p.name+'_'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') for newdeb in newdebs: if os.path.exists(DEB_DIR+'/'+newdeb) or \ @@ -4727,9 +4740,8 @@ assert(a[0] == 'http') #delta name - delta_name=p.name.split(':')[0]+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name @@ -5114,9 +5126,8 @@ continue #delta name - delta_name=p.name+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name diff -Nru debdelta-0.55/debdeltas debdelta-0.55+nmu1/debdeltas --- debdelta-0.55/debdeltas 2014-12-01 04:31:13.000000000 +1100 +++ debdelta-0.55+nmu1/debdeltas 2016-11-21 15:11:41.000000000 +1100 @@ -676,7 +676,14 @@ return join(v.split('%3a'),':') else: return v - + +def delta_base_name(pkg, old_ver, new_ver, arch, ext='.debdelta'): + assert(':' not in pkg) + return pkg + \ + '_' + version_mangle(old_ver) + \ + '_' + version_mangle(new_ver) + \ + '_' + arch + ext + def tempo(): TD = abspath(tempfile.mkdtemp(prefix='debdelta',dir=TMPDIR)) for i in 'OLD','NEW','PATCH' : @@ -2761,6 +2768,7 @@ "tries to guess the parameters used to compress, returns a string of options ; if check=True and it fails, returns False " par='' crc='' + thread='' z=tempfile.NamedTemporaryFile(suffix='.xz',delete=False) #unfortunately 'xz --list' does not work on pipes! shutil.copyfileobj(o,z) @@ -2779,6 +2787,8 @@ if par and par != a[15]: print " warning : this xz -- compressed file was compressed with variable blocks options ?! '%s' != '%s'" & (par,a[15]) par=a[15] + if not thread and a[12]=='cu': + thread='-T2' #print ' guessed par crc ',par,crc if crc: crc=crc.lower() @@ -2799,6 +2809,8 @@ w.append(par) if crc: w+=['-C',crc] + if thread: + w.append(thread) w.append('-') if VERBOSE > 2 : print ' Testing XZ options ',w w=subprocess.Popen(w,stdin=y.stdout,stdout=subprocess.PIPE,close_fds=True) @@ -2815,8 +2827,10 @@ return False if crc: crc=' -C '+crc + if thread: + thread=' '+thread os.unlink(z.name) - return par+crc + return par+crc+thread ########### helper sh functions for script, for delta_tar() @@ -3885,8 +3899,7 @@ continue assert( old['Package'] == pa and pa == new['Package'] ) - deltabasename = pa +'_'+ version_mangle(old['Version']) +\ - '_'+ version_mangle(new['Version']) +'_'+ar+'.debdelta' + deltabasename = delta_base_name(pa, old['Version'], new['Version'], ar) if 'Filename' in new: deltadirname=delta_dirname(os.path.dirname(new['Filename']),DIR) @@ -4693,13 +4706,13 @@ deb_path=string.join(deb_path[(thepoolindex):],'/') #try all possible variants of the filename - newdebs=[p.name+'_'+candidate_version+'_'+arch+'.deb', + newdebs=[p.shortname+'_'+candidate_version+'_'+arch+'.deb', os.path.basename(deb_uri)] if ':' in candidate_version: a=candidate_version.split(':') - newdebs.append(p.name+'_'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') for newdeb in newdebs: if os.path.exists(DEB_DIR+'/'+newdeb) or \ @@ -4727,9 +4740,8 @@ assert(a[0] == 'http') #delta name - delta_name=p.name.split(':')[0]+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name @@ -5114,9 +5126,8 @@ continue #delta name - delta_name=p.name+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name diff -Nru debdelta-0.55/debdelta-upgrade debdelta-0.55+nmu1/debdelta-upgrade --- debdelta-0.55/debdelta-upgrade 2014-12-01 04:31:13.000000000 +1100 +++ debdelta-0.55+nmu1/debdelta-upgrade 2016-11-21 15:11:41.000000000 +1100 @@ -676,7 +676,14 @@ return join(v.split('%3a'),':') else: return v - + +def delta_base_name(pkg, old_ver, new_ver, arch, ext='.debdelta'): + assert(':' not in pkg) + return pkg + \ + '_' + version_mangle(old_ver) + \ + '_' + version_mangle(new_ver) + \ + '_' + arch + ext + def tempo(): TD = abspath(tempfile.mkdtemp(prefix='debdelta',dir=TMPDIR)) for i in 'OLD','NEW','PATCH' : @@ -2761,6 +2768,7 @@ "tries to guess the parameters used to compress, returns a string of options ; if check=True and it fails, returns False " par='' crc='' + thread='' z=tempfile.NamedTemporaryFile(suffix='.xz',delete=False) #unfortunately 'xz --list' does not work on pipes! shutil.copyfileobj(o,z) @@ -2779,6 +2787,8 @@ if par and par != a[15]: print " warning : this xz -- compressed file was compressed with variable blocks options ?! '%s' != '%s'" & (par,a[15]) par=a[15] + if not thread and a[12]=='cu': + thread='-T2' #print ' guessed par crc ',par,crc if crc: crc=crc.lower() @@ -2799,6 +2809,8 @@ w.append(par) if crc: w+=['-C',crc] + if thread: + w.append(thread) w.append('-') if VERBOSE > 2 : print ' Testing XZ options ',w w=subprocess.Popen(w,stdin=y.stdout,stdout=subprocess.PIPE,close_fds=True) @@ -2815,8 +2827,10 @@ return False if crc: crc=' -C '+crc + if thread: + thread=' '+thread os.unlink(z.name) - return par+crc + return par+crc+thread ########### helper sh functions for script, for delta_tar() @@ -3885,8 +3899,7 @@ continue assert( old['Package'] == pa and pa == new['Package'] ) - deltabasename = pa +'_'+ version_mangle(old['Version']) +\ - '_'+ version_mangle(new['Version']) +'_'+ar+'.debdelta' + deltabasename = delta_base_name(pa, old['Version'], new['Version'], ar) if 'Filename' in new: deltadirname=delta_dirname(os.path.dirname(new['Filename']),DIR) @@ -4693,13 +4706,13 @@ deb_path=string.join(deb_path[(thepoolindex):],'/') #try all possible variants of the filename - newdebs=[p.name+'_'+candidate_version+'_'+arch+'.deb', + newdebs=[p.shortname+'_'+candidate_version+'_'+arch+'.deb', os.path.basename(deb_uri)] if ':' in candidate_version: a=candidate_version.split(':') - newdebs.append(p.name+'_'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') for newdeb in newdebs: if os.path.exists(DEB_DIR+'/'+newdeb) or \ @@ -4727,9 +4740,8 @@ assert(a[0] == 'http') #delta name - delta_name=p.name.split(':')[0]+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name @@ -5114,9 +5126,8 @@ continue #delta name - delta_name=p.name+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name diff -Nru debdelta-0.55/debian/changelog debdelta-0.55+nmu1/debian/changelog --- debdelta-0.55/debian/changelog 2014-12-01 04:31:13.000000000 +1100 +++ debdelta-0.55+nmu1/debian/changelog 2016-11-21 15:12:23.000000000 +1100 @@ -1,3 +1,13 @@ +debdelta (0.55+nmu1) unstable; urgency=medium + + * Non-maintainer upload. + * Fix i386 debdelta URLs output by debpatch-url on amd64 system. + (Closes: #740552) + * Fix guessing of xz parameters for files compressed in parallel. + (Closes: #845173) + + -- Carlos Maddela <e7ap...@gmail.com> Mon, 21 Nov 2016 15:12:23 +1100 + debdelta (0.55) unstable; urgency=medium * update git location diff -Nru debdelta-0.55/debpatch debdelta-0.55+nmu1/debpatch --- debdelta-0.55/debpatch 2014-12-01 04:31:13.000000000 +1100 +++ debdelta-0.55+nmu1/debpatch 2016-11-21 15:11:41.000000000 +1100 @@ -676,7 +676,14 @@ return join(v.split('%3a'),':') else: return v - + +def delta_base_name(pkg, old_ver, new_ver, arch, ext='.debdelta'): + assert(':' not in pkg) + return pkg + \ + '_' + version_mangle(old_ver) + \ + '_' + version_mangle(new_ver) + \ + '_' + arch + ext + def tempo(): TD = abspath(tempfile.mkdtemp(prefix='debdelta',dir=TMPDIR)) for i in 'OLD','NEW','PATCH' : @@ -2761,6 +2768,7 @@ "tries to guess the parameters used to compress, returns a string of options ; if check=True and it fails, returns False " par='' crc='' + thread='' z=tempfile.NamedTemporaryFile(suffix='.xz',delete=False) #unfortunately 'xz --list' does not work on pipes! shutil.copyfileobj(o,z) @@ -2779,6 +2787,8 @@ if par and par != a[15]: print " warning : this xz -- compressed file was compressed with variable blocks options ?! '%s' != '%s'" & (par,a[15]) par=a[15] + if not thread and a[12]=='cu': + thread='-T2' #print ' guessed par crc ',par,crc if crc: crc=crc.lower() @@ -2799,6 +2809,8 @@ w.append(par) if crc: w+=['-C',crc] + if thread: + w.append(thread) w.append('-') if VERBOSE > 2 : print ' Testing XZ options ',w w=subprocess.Popen(w,stdin=y.stdout,stdout=subprocess.PIPE,close_fds=True) @@ -2815,8 +2827,10 @@ return False if crc: crc=' -C '+crc + if thread: + thread=' '+thread os.unlink(z.name) - return par+crc + return par+crc+thread ########### helper sh functions for script, for delta_tar() @@ -3885,8 +3899,7 @@ continue assert( old['Package'] == pa and pa == new['Package'] ) - deltabasename = pa +'_'+ version_mangle(old['Version']) +\ - '_'+ version_mangle(new['Version']) +'_'+ar+'.debdelta' + deltabasename = delta_base_name(pa, old['Version'], new['Version'], ar) if 'Filename' in new: deltadirname=delta_dirname(os.path.dirname(new['Filename']),DIR) @@ -4693,13 +4706,13 @@ deb_path=string.join(deb_path[(thepoolindex):],'/') #try all possible variants of the filename - newdebs=[p.name+'_'+candidate_version+'_'+arch+'.deb', + newdebs=[p.shortname+'_'+candidate_version+'_'+arch+'.deb', os.path.basename(deb_uri)] if ':' in candidate_version: a=candidate_version.split(':') - newdebs.append(p.name+'_'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') for newdeb in newdebs: if os.path.exists(DEB_DIR+'/'+newdeb) or \ @@ -4727,9 +4740,8 @@ assert(a[0] == 'http') #delta name - delta_name=p.name.split(':')[0]+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name @@ -5114,9 +5126,8 @@ continue #delta name - delta_name=p.name+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name diff -Nru debdelta-0.55/debpatch-url debdelta-0.55+nmu1/debpatch-url --- debdelta-0.55/debpatch-url 2014-12-01 04:31:13.000000000 +1100 +++ debdelta-0.55+nmu1/debpatch-url 2016-11-21 15:11:41.000000000 +1100 @@ -676,7 +676,14 @@ return join(v.split('%3a'),':') else: return v - + +def delta_base_name(pkg, old_ver, new_ver, arch, ext='.debdelta'): + assert(':' not in pkg) + return pkg + \ + '_' + version_mangle(old_ver) + \ + '_' + version_mangle(new_ver) + \ + '_' + arch + ext + def tempo(): TD = abspath(tempfile.mkdtemp(prefix='debdelta',dir=TMPDIR)) for i in 'OLD','NEW','PATCH' : @@ -2761,6 +2768,7 @@ "tries to guess the parameters used to compress, returns a string of options ; if check=True and it fails, returns False " par='' crc='' + thread='' z=tempfile.NamedTemporaryFile(suffix='.xz',delete=False) #unfortunately 'xz --list' does not work on pipes! shutil.copyfileobj(o,z) @@ -2779,6 +2787,8 @@ if par and par != a[15]: print " warning : this xz -- compressed file was compressed with variable blocks options ?! '%s' != '%s'" & (par,a[15]) par=a[15] + if not thread and a[12]=='cu': + thread='-T2' #print ' guessed par crc ',par,crc if crc: crc=crc.lower() @@ -2799,6 +2809,8 @@ w.append(par) if crc: w+=['-C',crc] + if thread: + w.append(thread) w.append('-') if VERBOSE > 2 : print ' Testing XZ options ',w w=subprocess.Popen(w,stdin=y.stdout,stdout=subprocess.PIPE,close_fds=True) @@ -2815,8 +2827,10 @@ return False if crc: crc=' -C '+crc + if thread: + thread=' '+thread os.unlink(z.name) - return par+crc + return par+crc+thread ########### helper sh functions for script, for delta_tar() @@ -3885,8 +3899,7 @@ continue assert( old['Package'] == pa and pa == new['Package'] ) - deltabasename = pa +'_'+ version_mangle(old['Version']) +\ - '_'+ version_mangle(new['Version']) +'_'+ar+'.debdelta' + deltabasename = delta_base_name(pa, old['Version'], new['Version'], ar) if 'Filename' in new: deltadirname=delta_dirname(os.path.dirname(new['Filename']),DIR) @@ -4693,13 +4706,13 @@ deb_path=string.join(deb_path[(thepoolindex):],'/') #try all possible variants of the filename - newdebs=[p.name+'_'+candidate_version+'_'+arch+'.deb', + newdebs=[p.shortname+'_'+candidate_version+'_'+arch+'.deb', os.path.basename(deb_uri)] if ':' in candidate_version: a=candidate_version.split(':') - newdebs.append(p.name+'_'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') - newdebs.append(p.name+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3A'+a[1]+'_'+arch+'.deb') + newdebs.append(p.shortname+'_'+a[0]+'%3a'+a[1]+'_'+arch+'.deb') for newdeb in newdebs: if os.path.exists(DEB_DIR+'/'+newdeb) or \ @@ -4727,9 +4740,8 @@ assert(a[0] == 'http') #delta name - delta_name=p.name.split(':')[0]+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name @@ -5114,9 +5126,8 @@ continue #delta name - delta_name=p.name+'_'+version_mangle(installed_version)+\ - '_'+ version_mangle(candidate_version)+'_'+\ - arch+'.debdelta' + delta_name = delta_base_name(p.shortname, installed_version, + candidate_version, arch) uri=delta_uri_base+'/'+os.path.dirname(deb_path)+'/'+delta_name