Imported Upstream version 1.11.58 87/109387/1 upstream/1.11.58
authorDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 10 Jan 2017 05:29:19 +0000 (14:29 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 10 Jan 2017 05:29:20 +0000 (14:29 +0900)
Change-Id: I8039a82258f5a87c04b49ad7783e7ba9eded53bf
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
VERSION.cmake
package/zypper.changes
src/callbacks/rpm.h

index 2be40c9..4d32e90 100644 (file)
@@ -34,7 +34,7 @@
 #
 SET(VERSION_MAJOR "1")
 SET(VERSION_MINOR "11")
-SET(VERSION_PATCH "57")
+SET(VERSION_PATCH "58")
 
-# LAST RELEASED: 1.11.57
+# LAST RELEASED: 1.11.58
 #=======
index 2ef4b94..499ab3a 100644 (file)
@@ -1,4 +1,10 @@
 -------------------------------------------------------------------
+Tue Nov 22 17:26:37 CET 2016 - ma@suse.de
+
+- Properly escape patch script output in xml mode (bsc#1010712)
+- version 1.11.58
+
+-------------------------------------------------------------------
 Tue Jun 28 11:50:25 CEST 2016 - ma@suse.de
 
 - Update sle-zypper-po.tar.bz2 (bsc#986694)
index 1f89a62..b7cdf66 100644 (file)
@@ -129,14 +129,32 @@ struct PatchMessageReportReceiver : public zypp::callback::ReceiveReport<zypp::t
 struct PatchScriptReportReceiver : public zypp::callback::ReceiveReport<zypp::target::PatchScriptReport>
 {
   std::string _label;
+  scoped_ptr<Out::XmlNode> _guard;     // guard script output if Out::TYPE_XML
+
+  void closeNode()
+  { if ( _guard ) _guard.reset(); }
+
+  std::ostream & printOut( const std::string & output_r )
+  {
+    if ( _guard )
+      std::cout << xml::escape( output_r );
+    else
+      std::cout << output_r;
+    return std::cout;
+  }
+
 
   virtual void start( const zypp::Package::constPtr & package,
                      const zypp::Pathname & path_r ) // script path
   {
+    Zypper & zypper = *Zypper::instance();
+    if ( zypper.out().type() == Out::TYPE_XML )
+      _guard.reset( new Out::XmlNode( zypper.out(), "message", { "type", "info" } ) );
+
     _label = boost::str(
         // TranslatorExplanation speaking of a script - "Running: script file name (package name, script dir)"
         boost::format(_("Running: %s  (%s, %s)")) % path_r.basename() % package->name() % path_r.dirname());
-    std::cout << _label << std::endl;
+    printOut( _label ) << std::endl;
   }
 
   /**
@@ -157,7 +175,8 @@ struct PatchScriptReportReceiver : public zypp::callback::ReceiveReport<zypp::ta
     {
       if (was_ping_before)
        std::cout << std::endl;
-      std::cout << output;
+      printOut( output );
+
       was_ping_before = false;
     }
 
@@ -167,6 +186,7 @@ struct PatchScriptReportReceiver : public zypp::callback::ReceiveReport<zypp::ta
   /** Report error. */
   virtual Action problem( const std::string & description )
   {
+    closeNode();
     Zypper & zypper = *Zypper::instance();
 
     zypper.out().error(description);
@@ -180,8 +200,13 @@ struct PatchScriptReportReceiver : public zypp::callback::ReceiveReport<zypp::ta
   /** Report success. */
   virtual void finish()
   {
+    closeNode();
     Zypper::instance()->out().progressEnd("run-script", _label);
   }
+
+  /** Catch unexpected end. */
+  virtual void reportend()
+  { closeNode(); }
 };
 
 ///////////////////////////////////////////////////////////////////