Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: freeze-exception

Please unblock package debtags

It fixes bug #602634.

The debdiff is somewhat polluted by autotools updates. The important bit
is this one:

diff --git a/configure.ac b/configure.ac
index d6a1c0a..fd717ca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(debtags, 1.7.10, [enr...@debian.org])
+AC_INIT(debtags, 1.7.11, [enr...@debian.org])
 AC_CONFIG_SRCDIR([configure.ac])
 AM_CONFIG_HEADER(config.h)
 AM_INIT_AUTOMAKE([foreign])
diff --git a/debian/changelog b/debian/changelog
index 05cec5b..6759936 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+debtags (1.7.11) unstable; urgency=low
+
+  * Update /var/lib/debtags/package-tags. Closes: #602634.
+
+ -- Enrico Zini <enr...@debian.org>  Sat, 06 Nov 2010 19:33:06 +0000
+
 debtags (1.7.10) unstable; urgency=low
 
   * Build with new libept. Closes: #588546
diff --git a/tools/debtags.cc b/tools/debtags.cc
index 4ec2ea0..27a7de9 100644
--- a/tools/debtags.cc
+++ b/tools/debtags.cc
@@ -544,6 +544,68 @@ public:
        }
 };
 
+struct AtomicStdioWriter
+{
+       std::string fname;
+       char* tmpfname;
+       int fd;
+       FILE* out;
+
+       AtomicStdioWriter(const std::string& fname)
+               : fname(fname), tmpfname(0), out(0), fd(-1)
+       {
+               // Build the temp file template
+               tmpfname = new char[fname.size() + 8];
+               strncpy(tmpfname, fname.c_str(), fname.size());
+               strncpy(tmpfname + fname.size(), ".XXXXXX", 8);
+               // Create and open the temporary file
+               fd = mkstemp(tmpfname);
+               if (fd < 0)
+                       throw wibble::exception::File(tmpfname, "opening file");
+
+               // Pass the file descriptor to stdio
+               out = fdopen(fd, "wt");
+               if (!out)
+                       throw wibble::exception::File(tmpfname, "fdopening 
file");
+       }
+
+       ~AtomicStdioWriter()
+       {
+               if (out)
+               {
+                       if (unlink(tmpfname) == -1)
+                               throw wibble::exception::File(tmpfname, "cannot 
delete temporary file");
+                       fclose(out);
+               }
+               if (tmpfname) delete[] tmpfname;
+       }
+
+       void flush()
+       {
+               // Read the current umask
+               mode_t cur_umask = umask(0);
+               umask(cur_umask);
+
+               // Give the file the right permissions
+               if (fchmod(fd, 0666 & ~cur_umask) < 0)
+                       throw wibble::exception::File(tmpfname, "setting file 
permissions");
+
+               // Flush stdio's buffers
+               fflush(out);
+
+               // Flush OS buffers
+               fdatasync(fd);
+
+               // Close the file
+               fclose(out);
+               out = NULL;
+
+               // Rename the successfully written file to its final name
+               if (rename(tmpfname, fname.c_str()) == -1)
+                       throw wibble::exception::System(string("renaming ") + 
tmpfname + " to " + fname);
+       }
+};
+
 int main(int argc, const char* argv[])
 {
        wibble::commandline::DebtagsOptions opts;
@@ -1172,6 +1234,13 @@ int main(int argc, const char* argv[])
 
                        // Write out the merged, updated vocabulary
                        voc.write();
+
+                       // Read and merge all tag sources, and write them out
+                       {
+                               AtomicStdioWriter 
writer(debtags::Path::tagdb());
+                               
env().debtags().output(textformat::StdioWriter(writer.out));
+                               writer.flush();
+                       }
                }
                else if (opts.foundCommand() == opts.vocfilter)
                {

Code for AtomicStdioWriter comes from ept/debtags/vocabulary.cc in
libept, which is used to atomically write /var/lib/debtags/vocabulary

unblock debtags/1.7.11

-- System Information:
Debian Release: squeeze/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.32-5-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to