xz-utils (5.2.4-0.1) unstable; urgency=low

  * New upstream release.  Closes: #851615.
  * Use an XZ compressed tarball for upstream source.
  * Add upstream signing key and verify tarball at "uscan" time.
  * Drop patches; all were applied or otherwise fixed upstream.
  * Update copyright file.
  * debian/control:
    - Use a stable repo.or.cz URL for packaging repo.
      Closes: #826382.  Thanks to Rolf Leggewie.
    - Use https for upstream homepage URL.
    - No longer Build-Depends: freebsd-glue on kfreebsd.
  * get-orig-source: Use https for upstream Git repository.
  * liblzma:
    - Remove compatibility tricks that permit sharing a process with
      liblzma.so.2.  This means liblzma.a no longer depends on libdl
      at run time.
      Closes: #919950.  Thanks to Josh Triplett.
    - Breaks: liblzma2 versions without symbol versioning.
    - Priority: optional.
  * xz-utils:
    - Lower priority of xz-utils to standard.  Closes: #685203.
    - README.Debian: Remove notes about differences from upstream.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 27 Jan 2019 15:02:13 -0800

xz-utils (5.2.2-1.3) unstable; urgency=medium

  * Non-maintainer upload.
  * Force a constant /bin/sh for installed scripts. This helps the build
    be reproducible; /bin/sh on Debian is always POSIX. (Closes: #806331)

 -- Ximin Luo <infinity0@debian.org>  Wed, 28 Jun 2017 18:39:19 +0200

xz-utils (5.2.2-1.2) unstable; urgency=medium

  * Non-maintainer upload.
  * link against libfreebsd-glue on kfreebsd-* (Closes: #840063)

 -- Sebastian Andrzej Siewior <sebastian@breakpoint.cc>  Sat, 08 Oct 2016 15:11:19 +0200

xz-utils (5.2.2-1.1) unstable; urgency=medium

  * Non-maintainer upload.
  * switch to git-dpm for packaging (closes: #540405)
  * New Upstream (closes: #731634)
   - no more "xzless error in line 49" (closes: #693537)
   - xzgrep -h works (closes: #780268)
  * update symbol file
  * enable threads for the "normal build"

 -- Sebastian Andrzej Siewior <sebastian@breakpoint.cc>  Mon, 26 Sep 2016 20:45:45 +0200

xz-utils (5.1.1alpha+20120614-2.1) unstable; urgency=medium

  [ Helmut Grohne ]
  * Non-maintainer upload.

  [ Colin Watson ]
  * Remove build-dependency on perl; we use no non-trivial Perl modules so
    the Essential perl-base is perfectly adequate, and an unadorned
    build-dependency on perl is problematic for cross-building.
    Closes: #697328.

 -- Helmut Grohne <helmut@subdivi.de>  Thu, 18 Jun 2015 20:27:23 +0200

xz-utils (5.1.1alpha+20120614-2) unstable; urgency=low

  * Apply fixes from 5.1.2alpha.  Closes: #685220.
    - liblzma: report a LZMA_DATA_ERROR when range encoded data starts
      with a nonzero byte.  This is a sanity check to catch malformed
      files that no known encoders produce.
    - xz -v -v --list: Support for decompressing blocks with
      zero-length uncompressed data was added in xz 5.0.2, not 5.0.3.
    - xz.1: "xz --robot -v -v --list" gained a "minimum xz version to
      decompress" field.
  * xz-utils/README.Debian: Document differences from upstream.
    Closes: #685217.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 10 Sep 2012 14:35:33 -0700

xz-utils (5.1.1alpha+20120614-1) unstable; urgency=low

  * New snapshot, taken from upstream commit f1675f76.
    - liblzma: BCJ filters would return a spurious LZMA_BUF_ERROR
      result in certain circumstances.  As a result, the xz tool
      could produce inappropriate "Compressed data is corrupt" or
      "Unexpected end of input" failures (reported in XZ Embedded as
      Fedora bug 735408).
    - "xz -v -v --list" prints the minimal XZ Utils version needed
      to decompress a stream.
    - "xz --robot -v --list" formats filenames more plainly.
    - xzgrep does not fail unconditionally when the decompressor
      dies with SIGPIPE due to unconsumed output any more.  This
      makes the exit status from commands such as "xzgrep -q" and
      "xzgrep -l" more predictable and convenient for scripts.
    - examples/xz_pipe_decomp.c did not check correctly for
      truncated input.
    - There is a new set of sample programs.  The old ones have
      been renamed to examples_old but are still maintained.
  * liblzma:
    - If dlopen() indicates that liblzma.so.2 is loaded, check fewer
      reserved fields in the stream argument to the lzma_code()
      function.  This prevents out-of-bounds reads when liblzma5
      functions are called by code built against liblzma2 (see
      <http://sourceware.org/PR12977>).
    - Remove the lzma_code@Base compatibility symbol.
      Closes: #649522.  Thanks to Eduard Bloch.
    - Install run-time library to /lib so it can be used before /usr
      is mounted.  Closes: #672120.
    - Configure with --disable-threads for now to avoid needlessly
      linking to libpthread and librt.
  * liblzma-dev:
    - Install an appropriate library for static linking instead of
      the decompression-only version used to build xzdec.
      Closes: #673001.  Thanks to Anton Tolchanov.
    - Use the liblzma2-compatible version of lzma_code() in the
      static library.
    - Multi-Arch: same.  Thanks to Riku Voipio.
    - Install new examples and revised old examples to
      /usr/share/doc/liblzma-dev.
  * xz-utils:
    - Use update-alternatives to provide lzma, unlzma, lzcat, and
      the rest of the lz* scripts without conflicting with the lzma
      package.
    - Conflicts: lzma versions before before 9.22-1, when it started
      providing lzma, unlzma, and lzcat through the alternatives
      system.
    - Conflicts: and Replaces: xz-lzma.
    - README.Debian: Update instructions on configuring the package
      to provide lzma compatibility commands.
  * Remove xz-lzma package.
  * Use dpkg-buildflags to retrieve compiler flags, including
    hardening options.  Build-Depends: dpkg-dev (>= 1.16.1).
    Closes: #653739.
  * debian/rules:
    - build-arch: Simplify by using a double-colon rule instead of a
      dependency on a dummy noop target.
    - build-indep: Assume doxygen is available, instead of trying to
      get by by assuming the caller meant to invoke build-arch when
      it is missing.  Build-Depends: dpkg-dev (>= 1.16.2).
    - Rearrange for clarity.
  * debian/symbols: Bump the minimal version for lzma_code(),
    lzma_raw_buffer_decode(), and lzma_raw_buffer_encode().
  * Use machine-readable copyright-format 1.0.
  * Update copyright file.
  * Standards-Version: 3.9.3 (checked).
  * debian/changelog.upstream.sh: Use ‘git rev-list | git diff-tree’
    instead of ‘git log’ to avoid depending on the build system’s
    configuration.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sat, 16 Jun 2012 15:03:17 -0500

xz-utils (5.1.1alpha+20110809-3) unstable; urgency=low

  * liblzma: Match upstream ABI.
    - Remove the lzma_chunk_size() function.
    - A few ABI tweaks to reserved space in structures.
    - Enable ELF symbol versioning.
    - Bump soname to 5.
    - Continue to leave out threading support, since the relevant
      interfaces in liblzma are not yet stable.
  * xz-utils/README.Debian: Remove note on ABI differences.
  * Remove liblzma/README.Debian.
  * liblzma: Introduce a lzma_code@Base compatibility symbol to ensure
    programs linked against unversioned symbols from liblzma2 can
    share a process image with liblzma5 without breaking.
  * debian/symbols: XZ_5.0 symbols come from liblzma5.  Build-Depends:
    dpkg-dev (>= 1.15.6); thanks to Jakub Wilk for a reminder.
  * debian/symbols: The lzma_code@Base symbol is not guaranteed to
    continue to exist in the future, so tell dpkg-shlibdeps to produce
    an error if some package manages to use it.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 20 Oct 2011 21:31:31 -0500

xz-utils (5.1.1alpha+20110809-2) unstable; urgency=low

  * debian/rules build-arch: Do not trigger an infinite "make"
    recursion loop when DEB_BUILD_OPTIONS=nocheck.  Closes: #638071.
    Thanks to Thorsten Glaser.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 16 Aug 2011 18:11:47 -0500

xz-utils (5.1.1alpha+20110809-1) unstable; urgency=low

  * New snapshot, taken from upstream commit 5c5b225.
    - liblzma:
      - lzma_stream_encoder() leaked memory.
      - The LZMA2 decoder rejected streams that decompress to a
        zero-length string.
      - lzma_easy_buffer_encode() and lzma_stream_buffer_encode()
        used to write such streams when asked to compress a 0-length
        buffer.
      - lzma_index_init() would segfault on allocation failure.
      - liblzma: Various functions check their arguments (especially
        choice of integrity check) better, making it harder to create
        a corrupt .xz file instead of receiving an error.
    - xz and scripts:
      - "xz -v -v --list" would read and try to free() uninitialized
        memory, continuing past the end of an on-stack array, when
        asked to describe certain corrupted XZ files.
      - xz -S.suf now refuses to compress a file whose name already
        ends with the suffix “.suf”.
      - xz --force can be used to compress setuid, setgid, sticky,
        and multiply linked files.
      - xz uses posix_fadvise() to speed up sequential input.
      - xz --block-size forces a full flush periodically during
        compression, for better random-access reading support and to
        make simple parallelism possible in the future.
      - unxz: The new --single-stream option discards trailing
        garbage after the end of the first stream.
      - xzdiff can read gzip- and bzip2-compressed files.
      - xzdiff and xzgrep can read lzop-compressed files.
      - xzegrep and xzfgrep perform extended regex and fixed-string
        matches, respectively.  (The previous behavior was to always
        use basic regexes.)
      - xzgrep -l (= --files-with-match) works.
      - The Czech “xz --help” output uses a more correct term for
        files with holes.  Thanks to Petr Hubený.  Closes: #605762.
      - xz: New Polish and French translations.
    - The Doxygen-generated documentation uses short, relative paths
      to name source files.  Closes: #572273.
  * Update copyright file.
  * Remove example programs from debian/examples.  They are included
    in the upstream source package now.
  * Move liblzma to an architecture-specific directory, so the
    native library and foreign-architecture versions can be installed
    simultaneously.
    - liblzma2: Pre-Depends: multiarch-support.
    - Use debhelper compatibility level 9.  This requires passing
      the dh sequence name before other options when invoking dh in
      debian/rules.  Build-Depends: debhelper (>= 8.1.3).
    - liblzma2, liblzma-dev: Install files under /usr/lib/<triplet>
      instead of /usr/lib.
    - Thanks to Steve Langasek for explaining the process on the
      Debian wiki.
  * Standards-Version: 3.9.2 (checked).
  * debian/control: liblzma2 is Multi-Arch: same, while xz-utils
    and xzdec are Multi-Arch: foreign.  Closes: #637883.  Thanks to
    Riku Voipio.
  * debian/symbols: Bump the minimal version for LZMA2 encoder
    functions that reject more bad arguments and skip empty blocks.
  * debian/rules: ./configure --disable-symbol-versions for now.
  * debian/rules: Provide build-arch and build-indep targets that
    only build the code and the API documentation, respectively.
    Thanks to Roger Leigh for suggesting it through lintian.
    Build-Depends: debhelper (>= 8.9.0).
  * debian/rules: Treat DEB_BUILD_OPTIONS=nocheck as a request not to
    run build-time tests.  Thanks to Thorsten Glaser for a reminder.
    Closes: #627209.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 16 Aug 2011 00:40:31 -0500

xz-utils (5.0.0-2) unstable; urgency=low

  * Upload to unstable.
  * liblzma2, liblzma-dev, xz-lzma: Install release notes.
  * debian/symbols: Bump the minimal versions for lzma_index_encoder,
    lzma_index_decoder to the version in which they gained LZMA_FINISH
    support.
  * xz-utils/README.Debian: Document differences from upstream ABI.
  * debian/changelog.upstream.sh: Avoid empty changelog entries when
    multiple Debian revisions match an upstream tag.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 11 Nov 2010 13:45:20 -0600

xz-utils (5.0.0-1) experimental; urgency=low

  * Upload to experimental.
  * New stable upstream release.  Closes: #592298.
    - xz avoids SA_RESTART.  This should not have a visible effect
      because xz already blocked signals during operations that
      would be difficult to resume after interruption.
    - liblzma: The coders returned by lzma_index_encoder() and
      lzma_index_decoder() support an LZMA_FINISH action, with
      identical semantics to LZMA_RUN.
    - The printable (PDF and PS) versions of the manual are easier
      to read.
    - Many documentation and build system cleanups.
  * liblzma: Back out upstream ABI tweaks.
  * liblzma/README.Debian: Document ABI differences from upstream.
  * Copy sample code not included in the release tarball from
    the development upstream repository to debian/examples.
  * debian/rules clean: Remove some files not included in the
    release tarball.
  * copyright: List new INSTALL.generic license.
  * debian/rules clean: Take new build-aux scripts into account.
  * debian/rules:  Adapt for upstream build system changes.
    Closes: #540443.
  * xz-utils, xzdec: Install release notes.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 25 Oct 2010 05:45:18 -0500

xz-utils (4.999.9beta+20100927-1) experimental; urgency=low

  * New snapshot, taken from upstream commit cec0ddc.
    - liblzma: The meaning of --extreme has been tweaked to address
      cases in which it made the compression ratio worse.  Some files
      might benefit slightly less from --extreme.
    - xz: Table columns are not misaligned any more in messages with
      multi-byte characters (e.g., file sizes with LANG=fi_FI.UTF-8).
    - xz: New German and Italian translations.
    - Various documentation, message, and translation updates.
  * Update copyright file.
  * debian/rules get-orig-source: Update upstream Git URL.
  * xz-utils/README.Debian: Advertise XZ_DEFAULTS.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 27 Sep 2010 16:22:22 -0500

xz-utils (4.999.9beta+20100903-1) experimental; urgency=low

  * New snapshot, taken from upstream commit 373ee26.
    - liblzma: The settings for compression levels 0 through 5
      (used by xz -0/.../-5) have been tweaked.  This affects the
      speed, compression ratio, and memory usage at compression and
      decompression time.
    - Does not search so hard for a match when a low "nice match
      length" setting is specified without a depth.
    - xz: The -1/.../-9 preset options override any previously
      specified filters, rather than vice versa.  To mix presets
      with filter options, use the --lzma2=preset=n option.
    - xz: Warns about --memlimit-compress settings that result in
      compression settings changing even if no explicit -1/.../-9,
      --lzma1, or --lzma2 option was used.
    - "xz -v -v --compress" now prints an estimate of the memory
      required to decompress a file.
  * debian/copyright: Update upstream Git URL.
  * debian/changelog.upstream.sh: Permit terser changelog lines.
  * Standards-Version: 3.9.1 (checked).

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 03 Sep 2010 17:05:20 -0500

xz-utils (4.999.9beta+20100810-1) unstable; urgency=low

  * New upstream snapshot, taken from upstream commit d5653ba8a.
    - xz: The memory usage limiter is now disabled by default.
    - xz: Support for an XZ_DEFAULTS environment variable was added.
      It contains user-specific default settings, such as memory usage
      limits, and can be overridden by the command line and XZ_OPT.
    - xz: The new --memlimit-compress and --memlimit-decompress
      options allow the memory usage limit to be set separately for
      compression and decompression.  A new --memlimit alias has been
      added for the existing --memory option.
    - xz: The --info-memory option (with or without --robot) now prints
      how much RAM is installed in addition to the compression and
      decompression memory limits.
  * liblzma-doc: Simplify package description.
  * debian/control: Build-Depends: autopoint | gettext (<< 0.18-1),
    autopoint | cvs instead of autopoint, to help with backporting.
    Thanks to Thorsten Glaser for a report.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 10 Aug 2010 20:27:14 -0500

xz-utils (4.999.9beta+20100713-1) unstable; urgency=low

  [ Thorsten Glaser ]
  * Explicitly depend on autoconf (>= 2.64~) due to AC_PREREQ,
    discovered during backporting.

  [ Jonathan Nieder ]
  * Upload to unstable.
  * New upstream snapshot, taken from upstream commit a540198f.
    - xz: The new --no-adjust option can be used to error out if there
      is insufficient memory for the chosen compression level.
  * liblzma-dev: Install examples to /usr/share/doc/liblzma-dev.
  * Update copyright file.

  * Drop unpack-time conflicts in favor of configuration-time
    conflicts (Replaces + Breaks):
     - xz-utils: against old xz-lzma (for lzmainfo).
     - xzdec: against old xz-lzma (for lzmadec).
     - xz-lzma: against lzip 1.7 (for lzdiff and lzgrep).
  * Standards-Version: 3.9.0.

  * debian/autogen.sh: Don’t regenerate upstream changelog when it is
    not out of date.
  * debian/rules get-orig-source: Use gzip --no-name --rsyncable.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 15 Jul 2010 01:53:37 -0500

xz-utils (4.999.9beta+20100602-1) experimental; urgency=low

  * New upstream snapshot, taken from upstream commit d8b41eed.
    - The output from "xz -v --list" and "xz -v -v --list" has been
      improved.
      "xz -v -v --list" can be used to obtain an estimate for the memory
      required to decompress a file.
    - The xz manual page has some new material, including examples.
      Closes: #578465.
    - liblzma: The lzma_block_compressed_size() function no longer
      returns LZMA_DATA_ERROR for valid Blocks.
  * debian/symbols: Bump minimal version for lzma_block_compressed_size.
  * Correct the 4.999.9beta+20100307-1 changelog entry to describe
    which public functions were affected.

  * Add new xz-lzma package to allow xz to provide lzma and related
    commands.  Conflicts: and Provides: lzma.
  * xz-utils: Suggests: xz-lzma.
  * xz-utils/README.Debian: Take xz-lzma into account.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 04 Jun 2010 15:53:58 -0500

xz-utils (4.999.9beta+20100527-1) unstable; urgency=low

  * New upstream snapshot, taken from upstream commit a334348dc.
    - Show both elapsed time and estimated remaining time in xz -v.
      Thanks to Trent W. Buck for the idea.  Closes: #574583.
    - liblzma: Remove the Subblock filter from the public API
      (the ABI is unchanged).
  * liblzma-dev.NEWS: Update.
  * xz-utils: Update Czech translation.
  * Change priority of xz-utils and liblzma2 to required and
    xzdec to extra.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 27 May 2010 16:27:04 -0500

xz-utils (4.999.9beta+20100307-1) unstable; urgency=low

  * New upstream snapshot, taken from upstream commit f4b2b526.
    - liblzma: The stream initialization functions were not correctly
      initializing the internal allow_buffer_error flag.  As a result,
      ever since 4.999.9beta-1 in rare circumstances when decompressing
      LZMA files, the xz tool would produce spurious "Unexpected end
      of input" failures (Gentoo bug 305591).
    - The default memory usage limit on low-memory systems has been
      increased.
  * debian/copyright: Clarify.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 09 Mar 2010 10:22:24 -0600

xz-utils (4.999.9beta+20100212-4) unstable; urgency=low

  * debian/control: Build-Depends: autopoint instead of cvs.
    Closes: #572481.
  * debian/copyright: Clean up and include more details.
  * debian/rules get-orig-source: Unindent comment lines.
  * xz-utils: include Czech translation.

 -- Jonathan Nieder <jrnieder@gmail.com>  Thu, 04 Mar 2010 10:17:15 -0600

xz-utils (4.999.9beta+20100212-3) unstable; urgency=low

  * liblzma-dev: Remove unneeded .la file.
  * xz-utils: Dynamically link the xz binary.
  * Do not waste time installing and running doxygen on buildds that
    are not going to build arch-all packages.
    Build-Depends-Indep: doxygen.  Closes: #540444.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 23 Feb 2010 18:23:29 -0600

xz-utils (4.999.9beta+20100212-2) unstable; urgency=low

  * Split off xzdec and lzmadec commands into new xzdec package.
    Thanks to Guillem Jover for the idea.  Closes: #571060.
  * xz-utils.NEWS: advertise this change.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 23 Feb 2010 08:09:39 -0600

xz-utils (4.999.9beta+20100212-1) unstable; urgency=low

  * New upstream snapshot, taken from upstream commit eb7d51a3f.
     - xz --force compresses symlinks without complaint now.
     - liblzma: the optimized CRC32 implementation for x86 no longer
       misdetects the Hurd as Mac OS X.
  * debian/rules: ./configure --enable-assembler on the Hurd.
  * xz-utils: Simplify NEWS.Debian.gz.
  * liblzma-dev: Add a NEWS file to keep track of future API changes.

  * Drop unnecessary build-time conflict with autoconf2.13.
  * Add a blank line to the end of all NEWS files.
    (Works around: #247356)
  * debian/README.source: Leave out “-I -i” options.  Ignoring version
    control cruft is the default behavior with dpkg source format 3.0.
  * debian/changelog.upstream.sh: Pass ‘git log’ an explicit --format
    option to avoid problems if format.pretty is set in gitconfig.

  * Correct the 4.999.9beta+20100117-1 changelog entry.  It said:
     + The user-specified memory usage limit was not being honored in
       some cases.
    No such bug was observed, so describe the change instead.

 -- Jonathan Nieder <jrnieder@gmail.com>  Tue, 16 Feb 2010 00:30:24 -0600

xz-utils (4.999.9beta+20100131-1) unstable; urgency=low

  * New upstream snapshot, taken from upstream commit f9dd797a.
     + xz: the --list option to display information about a compressed
       file (e.g., its uncompressed size) is now functional.  The output
       of the xz --robot --list command still may change in future
       versions.
  * xz-utils: NEWS.Debian.gz: Clarify how interleaved output can
    go wrong.
  * debian/rules: Simplify:
     - remove support for comma as a delimiter for $(DEB_BUILD_OPTIONS).
     - rely on dh --parallel instead of tricky logic of our own to
       handle parallel builds.  Build-Depends: debhelper (>= 7.4.10).
  * Correct some typos in the 4.999.9beta+20100117-1 changelog entry.
  * Standards-Version: 3.8.4 (checked).
  * Update copyright file.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 31 Jan 2010 17:32:02 -0600

xz-utils (4.999.9beta+20100117-1) unstable; urgency=low

  * New upstream snapshot, taken from upstream commit 07a11dad.
     + Fix some logic errors in the internal memory usage configuration
       API.
     + xz will no longer compress or decompress special files in place,
       even with --force.
       --force still enables compression of the target of a symlink.
     + xz will no longer read compressed data from a terminal or write
       it to a terminal, even with --force.
     + liblzma: many Index handling API improvements:
        - An lzma_index includes more useful metadata that is not
          actually from the Index.  This is particularly helpful for
          describing multiple-stream files.
           * lzma_index_cat() does not take a stream padding argument
             any more; use lzma_index_stream_padding() instead.
           * lzma_index_memusage() takes two arguments now.
             The new lzma_index_memused() convenience function
             calculates the total memory usage of an lzma_index.
           * lzma_index_count() has been replaced with
             lzma_index_block_count() and lzma_index_stream_count().
           * The new lzma_index_stream_flags() allows storing Stream
             Flags (e.g., checksum types) with the Index information.
           * The new lzma_index_checks() function indicates the list of
             checksum types in use.
           * lzma_index_equal() has been removed.  Its semantics were
             unclear, and something approximately equivalent can be
             implemented by iterating over Blocks in application code.
        - An lzma_index no longer represents a position within an Index.
          The new lzma_index_iter type can be used for that purpose.
           * Certain functions generate an iterator on demand now rather
             than clobbering their lzma_index arguments.  Using a single
             lzma_index for multiple concurrent invocations is safe now:
              lzma_index_buffer_encode(), lzma_index_encoder()
           * Functions that used to specify a Record by modifying an
             lzma_index argument have been renamed and taught to write
             an lzma_index_iter instead:
              lzma_index_locate() -> lzma_index_iter_locate()
              lzma_index_rewind() -> lzma_index_iter_rewind()
              lzma_index_read() -> lzma_index_iter_next()
           * The lzma_index_record type used by lzma_index_read() for
             complex seeks is no more.  lzma_index_iter_next() instead
             takes a parameter of the new lzma_index_iter_mode type.
           * New function: lzma_index_iter_init()
           * lzma_index_init() cannot reuse memory from an existing
             lzma_index any more.  The signature changed accordingly.
     + xz: support for decompressing to a sparse file
        - Try to write a sparse file if the decompressed stream contains
          long runs of null bytes.
        - The new --no-sparse option disables this behavior.
     + xz: add Czech translation.
     + liblzma-dev: lzma_filters_copy() and lzma_filters_update() are
       declared not to throw exceptions.
  * liblzma: bump soname.
  * xz-utils: Add NEWS.Debian describing the sparse file support.
  * debian/rules: Stop explicitly disabling assembler optimizations on
    the Hurd.  The configure script will check if a platform is
    supported.

  * debian/rules: Update clean target to handle comments and wildcards
    in .gitignore.
  * Build-Depends: perl.

  * debian/rules: Speed up build by using autoreconf --symlink.
  * Remove debian/dirs lists.
  * Update copyright file and fix a small typo.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 18 Jan 2010 04:19:50 -0600

xz-utils (4.999.9beta+20091116-1) unstable; urgency=low

  * New upstream snapshot, taken from upstream commit d315ca4.
     + liblzma: add some new functions:
        - lzma_filters_copy() to copy a filter chain;
        - lzma_filters_update() to change compression options mid-stream;
        - lzma_physmem() to retrieve the total quantity of installed RAM.
     + Fix a design error in liblzma API.
        - Stop requiring caller to maintain filter chain during
          compression.  The library used to read it for new compression
          options.  Callers that need to change options mid-stream should
          use lzma_filters_update() instead.
        - Remove 'persistent' member from struct lzma_options_lzma.
     + xz: add --robot --info-memory options, for front-ends to use to
       read the memory usage limit.
  * liblzma: bump soname; add README.Debian explaining why soname
    differs from upstream.
  * Use source format 3.0 (quilt).
  * Update and clarify copyright file.

 -- Jonathan Nieder <jrnieder@gmail.com>  Mon, 16 Nov 2009 16:33:35 -0600

xz-utils (4.999.9beta+20091016-1) unstable; urgency=low

  * New upstream snapshot, taken from upstream commit 78e92c1.
  * Drop xzmore.1 patch, applied upstream.
  * debian/rules: Disable assembler optimizations on hurd. (Closes: #553331)
  * debian/control: Clarify binary package descriptions.  Thanks to
    Justin B Rye and Ben Finney for the text.
  * debian/rules get-orig-source: Use commit date (instead of last patch
    date) to name snapshots.

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 01 Nov 2009 00:22:04 -0500

xz-utils (4.999.9beta+20091004-1) unstable; urgency=low

  * Upload to unstable. (Closes: #543562)
  * New upstream snapshot, taken from upstream commit ebfb2c5.
  * Patch xzmore.1 to use dashes instead of minus signs.
  * debian/control: Conflicts: xz-lzma. (Closes: #550249)
  * liblzma-doc: Register Doxygen-generated docs with doc-base.
  * debian/changelog.upstream.sh: Declare local variables.
  * debian/changelog.upstream.sh: Cope with multiple Debian revisions per
    upstream version.
  * debian/rules: Use ":=" where appropriate.
  * Add watch file.

 -- Jonathan Nieder <jrnieder@gmail.com>  Fri, 16 Oct 2009 13:58:54 -0500

xz-utils (4.999.9beta+20091002-1) experimental; urgency=low

  * New upstream snapshot, taken from upstream commit 29fd321.
  * debian/control: Build-Depends: cvs (for autopoint).

 -- Jonathan Nieder <jrnieder@gmail.com>  Sun, 04 Oct 2009 00:21:08 -0500

xz-utils (4.999.9beta-1) experimental; urgency=low

  [ Jonathan Nieder ]
  * New upstream release.
     - Fix a data corruption in the compression code. (Closes: #544872)
     - xzdiff: Fix comparing two compressed files. (Closes: #540543)
     - Most of XZ Utils is now in the public domain. (Closes: #541391)
     - Add doc/history.txt to the distributed tarball. (Closes: #541540)
  * Update and clarify copyright file.
  * Drop lzma compatibility commands for now. (Closes: #542060, #540232)
    Add instructions to README.Debian for installing them locally.
  * debian/control: Add information about the packaging Git repository.
  * debian/control: Clarify package descriptions.
  * debian/README.source: Clarify build instructions.
  * Add debian/.gitignore listing build products.
  * Build xz-utils with static liblzma.
     - debian/rules: Use configure --enable-dynamic=mixed.
  * Optimize xzdec for size, following suggestion in PACKAGERS.
     - debian/rules: Build xzdec separately so it can be optimized for size.
     - debian/control: Build-Depends: debhelper (>= 7.3.0).
  * Generate upstream changelog instead of shipping placeholder.
     - debian/README.source: Add instructions for regenerating upstream
       changelog file.
     - debian/changelog.upstream.sh: New script.
     - debian/rules: Install generated changelog file.
  * liblzma-doc: Drop documentation already shipped in
    /usr/share/doc/xz-utils.
  * liblzma-dev, liblzma-doc: Add short README.Debian with pointers to
    development documentation.
  * Drop debian/xzdec.1, since upstream ships a better man page.
  * Run autotools at build time.
     + debian/control:
        - Build-Depends: autoconf, automake, libtool, gettext
        - Build-Conflicts: autoconf2.13, automake1.4
     + debian/rules:
        - configure: autoreconf -fi
        - clean: remove autotools-generated files to avoid .diff.gz
          changes when built twice in a row.
  * debian/rules: Add get-orig-source target.
  * Prepare for upload to experimental.

  [ Cristian Greco ]
  * debian/copyright: refer to versioned GPL-3 file.
  * debian/control: remove duplicate field ‘section’ in package xz-utils.

 -- Jonathan Nieder <jrnieder@gmail.com>  Wed, 30 Sep 2009 01:44:04 -0500

xz-utils (4.999.8beta-1) experimental; urgency=low

  [ Jonathan Nieder ]
  * Initial package for Debian. (Closes: #518803)
     + debian/rules:
        - add minimal rules file (using Debhelper 7), a control file
          describing the binary packages, and an appropriate compat file.
        - use configure --enable-dynamic; use up-to-date config.guess and
          config.sub files.
        - do not run automake and so on on autobuilders. Instead, we can
          run them ourselves when we build the source package.
     + debian/README.source:
        - add informations about the packaging GIT repository.
  * Add liblzma-doc package with Doxygen-generated API docs.

  [ Mohammed Adnène Trojette ]
  * Prepare for upload to experimental.

 -- Mohammed Adnène Trojette <adn+deb@diwi.org>  Sat, 27 Jun 2009 17:26:56 +0200
