openSUSE Commits
Threads by month
- ----- 2025 -----
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
April 2019
- 1 participants
- 1906 discussions
Hello community,
here is the log from the commit of package ghc-http-client for openSUSE:Factory checked in at 2019-04-28 20:12:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-http-client (Old)
and /work/SRC/openSUSE:Factory/.ghc-http-client.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-http-client"
Sun Apr 28 20:12:50 2019 rev:32 rq:698551 version:0.6.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-http-client/ghc-http-client.changes 2019-03-06 15:47:17.664452290 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-http-client.new.5536/ghc-http-client.changes 2019-04-28 20:12:57.894436694 +0200
@@ -1,0 +2,21 @@
+Sat Apr 13 02:03:10 UTC 2019 - psimons(a)suse.com
+
+- Update http-client to version 0.6.4.
+ ## 0.6.4
+
+ * Avoid throwing an exception when a malformed HTTP header is received,
+ to be as robust as commonly used HTTP clients.
+ See [#398](https://github.com/snoyberg/http-client/issues/398)
+
+-------------------------------------------------------------------
+Wed Apr 3 02:01:38 UTC 2019 - psimons(a)suse.com
+
+- Update http-client to version 0.6.3.
+ ## 0.6.3
+
+ * Detect response body termination before reading an extra null chunk
+ when possible. This allows connections to be reused in some corner
+ cases. See
+ [#395](https://github.com/snoyberg/http-client/issues/395)
+
+-------------------------------------------------------------------
Old:
----
http-client-0.6.2.tar.gz
New:
----
http-client-0.6.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-http-client.spec ++++++
--- /var/tmp/diff_new_pack.WsgqkI/_old 2019-04-28 20:13:02.166434039 +0200
+++ /var/tmp/diff_new_pack.WsgqkI/_new 2019-04-28 20:13:02.166434039 +0200
@@ -19,7 +19,7 @@
%global pkg_name http-client
%bcond_with tests
Name: ghc-%{pkg_name}
-Version: 0.6.2
+Version: 0.6.4
Release: 0
Summary: An HTTP client engine
License: MIT
++++++ http-client-0.6.2.tar.gz -> http-client-0.6.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.6.2/ChangeLog.md new/http-client-0.6.4/ChangeLog.md
--- old/http-client-0.6.2/ChangeLog.md 2019-02-27 11:43:18.000000000 +0100
+++ new/http-client-0.6.4/ChangeLog.md 2019-04-12 07:51:44.000000000 +0200
@@ -1,5 +1,18 @@
# Changelog for http-client
+## 0.6.4
+
+* Avoid throwing an exception when a malformed HTTP header is received,
+ to be as robust as commonly used HTTP clients.
+ See [#398](https://github.com/snoyberg/http-client/issues/398)
+
+## 0.6.3
+
+* Detect response body termination before reading an extra null chunk
+ when possible. This allows connections to be reused in some corner
+ cases. See
+ [#395](https://github.com/snoyberg/http-client/issues/395)
+
## 0.6.2
* Add `shouldStripHeaderOnRedirect` option to `Request` [#300](https://github.com/snoyberg/http-client/issues/300)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.6.2/Network/HTTP/Client/Body.hs new/http-client-0.6.4/Network/HTTP/Client/Body.hs
--- old/http-client-0.6.2/Network/HTTP/Client/Body.hs 2016-12-19 16:30:12.000000000 +0100
+++ new/http-client-0.6.4/Network/HTTP/Client/Body.hs 2019-04-02 15:24:20.000000000 +0200
@@ -8,7 +8,6 @@
, brConsume
, brEmpty
, constBodyReader
- , brAddCleanup
, brReadSome
, brRead
) where
@@ -61,12 +60,6 @@
[] -> ([], S.empty)
x:xs -> (xs, x)
-brAddCleanup :: IO () -> BodyReader -> BodyReader
-brAddCleanup cleanup brRead' = do
- bs <- brRead'
- when (S.null bs) cleanup
- return bs
-
-- | Strictly consume all remaining chunks of data from the stream.
--
-- Since 0.1.0
@@ -111,16 +104,25 @@
Nothing -> start
Just popper -> goPopper popper
-makeUnlimitedReader :: Connection -> IO BodyReader
-makeUnlimitedReader Connection {..} = do
+makeUnlimitedReader
+ :: IO () -- ^ cleanup
+ -> Connection
+ -> IO BodyReader
+makeUnlimitedReader cleanup Connection {..} = do
icomplete <- newIORef False
return $ do
bs <- connectionRead
- when (S.null bs) $ writeIORef icomplete True
+ when (S.null bs) $ do
+ writeIORef icomplete True
+ cleanup
return bs
-makeLengthReader :: Int -> Connection -> IO BodyReader
-makeLengthReader count0 Connection {..} = do
+makeLengthReader
+ :: IO () -- ^ cleanup
+ -> Int
+ -> Connection
+ -> IO BodyReader
+makeLengthReader cleanup count0 Connection {..} = do
icount <- newIORef count0
return $ do
count <- readIORef icount
@@ -134,20 +136,27 @@
let (x, y) = S.splitAt count bs
connectionUnread y
writeIORef icount (-1)
+ cleanup
return x
EQ -> do
writeIORef icount (-1)
+ cleanup
return bs
GT -> do
writeIORef icount (count - S.length bs)
return bs
-makeChunkedReader :: Bool -- ^ raw
- -> Connection
- -> IO BodyReader
-makeChunkedReader raw conn@Connection {..} = do
+makeChunkedReader
+ :: IO () -- ^ cleanup
+ -> Bool -- ^ raw
+ -> Connection
+ -> IO BodyReader
+makeChunkedReader cleanup raw conn@Connection {..} = do
icount <- newIORef 0
- return $ go icount
+ return $ do
+ bs <- go icount
+ when (S.null bs) cleanup
+ pure bs
where
go icount = do
count0 <- readIORef icount
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.6.2/Network/HTTP/Client/Headers.hs new/http-client-0.6.4/Network/HTTP/Client/Headers.hs
--- old/http-client-0.6.2/Network/HTTP/Client/Headers.hs 2018-11-19 06:27:06.000000000 +0100
+++ new/http-client-0.6.4/Network/HTTP/Client/Headers.hs 2019-04-12 07:51:44.000000000 +0200
@@ -89,14 +89,21 @@
if S.null line
then return $ front []
else do
- header <- parseHeader line
- parseHeaders (count + 1) $ front . (header:)
+ mheader <- parseHeader line
+ case mheader of
+ Just header ->
+ parseHeaders (count + 1) $ front . (header:)
+ Nothing ->
+ -- Unparseable header line; rather than throwing
+ -- an exception, ignore it for robustness.
+ parseHeaders count front
- parseHeader :: S.ByteString -> IO Header
+ parseHeader :: S.ByteString -> IO (Maybe Header)
parseHeader bs = do
let (key, bs2) = S.break (== charColon) bs
- when (S.null bs2) $ throwHttp $ InvalidHeader bs
- return (CI.mk $! strip key, strip $! S.drop 1 bs2)
+ if S.null bs2
+ then return Nothing
+ else return (Just (CI.mk $! strip key, strip $! S.drop 1 bs2))
strip = S.dropWhile (== charSpace) . fst . S.spanEnd (== charSpace)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.6.2/Network/HTTP/Client/Response.hs new/http-client-0.6.4/Network/HTTP/Client/Response.hs
--- old/http-client-0.6.2/Network/HTTP/Client/Response.hs 2019-02-27 11:43:18.000000000 +0100
+++ new/http-client-0.6.4/Network/HTTP/Client/Response.hs 2019-04-02 15:24:20.000000000 +0200
@@ -107,15 +107,14 @@
else do
body1 <-
if isChunked
- then makeChunkedReader rawBody conn
+ then makeChunkedReader (cleanup True) rawBody conn
else
case mcl of
- Just len -> makeLengthReader len conn
- Nothing -> makeUnlimitedReader conn
- body2 <- if needsGunzip req hs
+ Just len -> makeLengthReader (cleanup True) len conn
+ Nothing -> makeUnlimitedReader (cleanup True) conn
+ if needsGunzip req hs
then makeGzipReader body1
else return body1
- return $ brAddCleanup (cleanup True) body2
return Response
{ responseStatus = s
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.6.2/Network/HTTP/Client/Types.hs new/http-client-0.6.4/Network/HTTP/Client/Types.hs
--- old/http-client-0.6.2/Network/HTTP/Client/Types.hs 2019-02-27 11:43:18.000000000 +0100
+++ new/http-client-0.6.4/Network/HTTP/Client/Types.hs 2019-04-05 16:28:05.000000000 +0200
@@ -518,9 +518,9 @@
--
-- @since 0.5.0
, responseTimeout :: ResponseTimeout
- -- ^ Number of microseconds to wait for a response. If
- -- @Nothing@, will wait indefinitely. Default: use
- -- 'managerResponseTimeout' (which by default is 30 seconds).
+ -- ^ Number of microseconds to wait for a response (see 'ResponseTimeout'
+ -- for more information). Default: use 'managerResponseTimeout' (which by
+ -- default is 30 seconds).
--
-- Since 0.1.0
, cookieJar :: Maybe CookieJar
@@ -565,8 +565,12 @@
-- @since 0.5.0
data ResponseTimeout
= ResponseTimeoutMicro !Int
+ -- ^ Wait the given number of microseconds and then throw an exception
| ResponseTimeoutNone
+ -- ^ Wait indefinitely
| ResponseTimeoutDefault
+ -- ^ Fall back to the manager setting ('managerResponseTimeout') or, in its
+ -- absence, Wait 30 seconds and then throw an exception.
deriving (Eq, Show)
instance Show Request where
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.6.2/http-client.cabal new/http-client-0.6.4/http-client.cabal
--- old/http-client-0.6.2/http-client.cabal 2019-02-27 11:43:18.000000000 +0100
+++ new/http-client-0.6.4/http-client.cabal 2019-04-12 07:51:44.000000000 +0200
@@ -1,5 +1,5 @@
name: http-client
-version: 0.6.2
+version: 0.6.4
synopsis: An HTTP client engine
description: Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/http-client>.
homepage: https://github.com/snoyberg/http-client
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/http-client-0.6.2/test-nonet/Network/HTTP/Client/BodySpec.hs new/http-client-0.6.4/test-nonet/Network/HTTP/Client/BodySpec.hs
--- old/http-client-0.6.2/test-nonet/Network/HTTP/Client/BodySpec.hs 2016-12-19 16:29:45.000000000 +0100
+++ new/http-client-0.6.4/test-nonet/Network/HTTP/Client/BodySpec.hs 2019-04-02 15:24:20.000000000 +0200
@@ -22,7 +22,7 @@
(conn, _, input) <- dummyConnection
[ "5\r\nhello\r\n6\r\n world\r\n0\r\nnot consumed"
]
- reader <- makeChunkedReader False conn
+ reader <- makeChunkedReader (return ()) False conn
body <- brConsume reader
S.concat body `shouldBe` "hello world"
input' <- input
@@ -32,7 +32,7 @@
it "chunked, pieces" $ do
(conn, _, input) <- dummyConnection $ map S.singleton $ S.unpack
"5\r\nhello\r\n6\r\n world\r\n0\r\nnot consumed"
- reader <- makeChunkedReader False conn
+ reader <- makeChunkedReader (return ()) False conn
body <- brConsume reader
S.concat body `shouldBe` "hello world"
input' <- input
@@ -43,7 +43,7 @@
(conn, _, input) <- dummyConnection
[ "5\r\nhello\r\n6\r\n world\r\n0\r\nnot consumed"
]
- reader <- makeChunkedReader True conn
+ reader <- makeChunkedReader (return ()) True conn
body <- brConsume reader
S.concat body `shouldBe` "5\r\nhello\r\n6\r\n world\r\n0\r\n"
input' <- input
@@ -53,7 +53,7 @@
it "chunked, pieces, raw" $ do
(conn, _, input) <- dummyConnection $ map S.singleton $ S.unpack
"5\r\nhello\r\n6\r\n world\r\n0\r\nnot consumed"
- reader <- makeChunkedReader True conn
+ reader <- makeChunkedReader (return ()) True conn
body <- brConsume reader
S.concat body `shouldBe` "5\r\nhello\r\n6\r\n world\r\n0\r\n"
input' <- input
@@ -64,7 +64,7 @@
(conn, _, input) <- dummyConnection
[ "hello world done"
]
- reader <- makeLengthReader 11 conn
+ reader <- makeLengthReader (return ()) 11 conn
body <- brConsume reader
S.concat body `shouldBe` "hello world"
input' <- input
@@ -74,7 +74,7 @@
it "length, pieces" $ do
(conn, _, input) <- dummyConnection $ map S.singleton $ S.unpack
"hello world done"
- reader <- makeLengthReader 11 conn
+ reader <- makeLengthReader (return ()) 11 conn
body <- brConsume reader
S.concat body `shouldBe` "hello world"
input' <- input
@@ -85,7 +85,7 @@
let orig = L.fromChunks $ replicate 5000 "Hello world!"
origZ = compress orig
(conn, _, input) <- dummyConnection $ L.toChunks origZ ++ ["ignored"]
- reader' <- makeLengthReader (fromIntegral $ L.length origZ) conn
+ reader' <- makeLengthReader (return ()) (fromIntegral $ L.length origZ) conn
reader <- makeGzipReader reader'
body <- brConsume reader
L.fromChunks body `shouldBe` orig
1
0
Hello community,
here is the log from the commit of package ghc-fast-logger for openSUSE:Factory checked in at 2019-04-28 20:12:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-fast-logger (Old)
and /work/SRC/openSUSE:Factory/.ghc-fast-logger.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-fast-logger"
Sun Apr 28 20:12:47 2019 rev:15 rq:698550 version:2.4.15
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-fast-logger/ghc-fast-logger.changes 2018-12-28 12:35:22.975960921 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-fast-logger.new.5536/ghc-fast-logger.changes 2019-04-28 20:12:49.546441881 +0200
@@ -1,0 +2,15 @@
+Fri Apr 12 02:01:57 UTC 2019 - psimons(a)suse.com
+
+- Update fast-logger to version 2.4.15.
+ Upstream has not updated the file "ChangeLog.md" since the last
+ release.
+
+-------------------------------------------------------------------
+Thu Apr 11 06:35:18 UTC 2019 - psimons(a)suse.com
+
+- Update fast-logger to version 2.4.14.
+ ## 2.4.14
+
+ * Add `ToLogStr` instances for the following types: signed integers, unsigned integers, floating-point numbers. These instances all use decimal encodings. [#177](https://github.com/kazu-yamamoto/logger/pull/177)
+
+-------------------------------------------------------------------
Old:
----
fast-logger-2.4.13.tar.gz
New:
----
fast-logger-2.4.15.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-fast-logger.spec ++++++
--- /var/tmp/diff_new_pack.67VrU1/_old 2019-04-28 20:12:50.190441481 +0200
+++ /var/tmp/diff_new_pack.67VrU1/_new 2019-04-28 20:12:50.194441479 +0200
@@ -1,7 +1,7 @@
#
# spec file for package ghc-fast-logger
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%global pkg_name fast-logger
%bcond_with tests
Name: ghc-%{pkg_name}
-Version: 2.4.13
+Version: 2.4.15
Release: 0
Summary: A fast logging system
License: BSD-3-Clause
++++++ fast-logger-2.4.13.tar.gz -> fast-logger-2.4.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast-logger-2.4.13/ChangeLog.md new/fast-logger-2.4.15/ChangeLog.md
--- old/fast-logger-2.4.13/ChangeLog.md 2018-12-25 03:45:26.000000000 +0100
+++ new/fast-logger-2.4.15/ChangeLog.md 2019-04-11 07:09:10.000000000 +0200
@@ -1,3 +1,7 @@
+## 2.4.14
+
+* Add `ToLogStr` instances for the following types: signed integers, unsigned integers, floating-point numbers. These instances all use decimal encodings. [#177](https://github.com/kazu-yamamoto/logger/pull/177)
+
## 2.4.11
* Give an explicit definition for (<>) in LogStr's Semigroup instance. [#155](https://github.com/kazu-yamamoto/logger/pull/155)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast-logger-2.4.13/System/Log/FastLogger/LogStr.hs new/fast-logger-2.4.15/System/Log/FastLogger/LogStr.hs
--- old/fast-logger-2.4.13/System/Log/FastLogger/LogStr.hs 2018-12-25 03:45:26.000000000 +0100
+++ new/fast-logger-2.4.15/System/Log/FastLogger/LogStr.hs 2019-04-11 07:09:10.000000000 +0200
@@ -28,6 +28,8 @@
import qualified Data.Semigroup as Semi (Semigroup(..))
#endif
import Data.String (IsString(..))
+import Data.Int (Int8,Int16,Int32,Int64)
+import Data.Word (Word,Word8,Word16,Word32,Word64)
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as TL
@@ -67,6 +69,9 @@
instance IsString LogStr where
fromString = toLogStr . TL.pack
+-- | Types that can be converted to a 'LogStr'. Instances for
+-- types from the @text@ library use a UTF-8 encoding. Instances
+-- for numerical types use a decimal encoding.
class ToLogStr msg where
toLogStr :: msg -> LogStr
@@ -75,7 +80,7 @@
instance ToLogStr S8.ByteString where
toLogStr bs = LogStr (BS.length bs) (toBuilder bs)
instance ToLogStr BL.ByteString where
- toLogStr = toLogStr . S8.concat . BL.toChunks
+ toLogStr b = LogStr (fromIntegral (BL.length b)) (B.lazyByteString b)
instance ToLogStr Builder where
toLogStr x = let b = B.toLazyByteString x in LogStr (fromIntegral (BL.length b)) (B.lazyByteString b)
instance ToLogStr String where
@@ -85,6 +90,48 @@
instance ToLogStr TL.Text where
toLogStr = toLogStr . TL.encodeUtf8
+-- | @since 2.4.14
+instance ToLogStr Int where
+ toLogStr = toLogStr . B.intDec
+-- | @since 2.4.14
+instance ToLogStr Int8 where
+ toLogStr = toLogStr . B.int8Dec
+-- | @since 2.4.14
+instance ToLogStr Int16 where
+ toLogStr = toLogStr . B.int16Dec
+-- | @since 2.4.14
+instance ToLogStr Int32 where
+ toLogStr = toLogStr . B.int32Dec
+-- | @since 2.4.14
+instance ToLogStr Int64 where
+ toLogStr = toLogStr . B.int64Dec
+
+-- | @since 2.4.14
+instance ToLogStr Word where
+ toLogStr = toLogStr . B.wordDec
+-- | @since 2.4.14
+instance ToLogStr Word8 where
+ toLogStr = toLogStr . B.word8Dec
+-- | @since 2.4.14
+instance ToLogStr Word16 where
+ toLogStr = toLogStr . B.word16Dec
+-- | @since 2.4.14
+instance ToLogStr Word32 where
+ toLogStr = toLogStr . B.word32Dec
+-- | @since 2.4.14
+instance ToLogStr Word64 where
+ toLogStr = toLogStr . B.word64Dec
+
+-- | @since 2.4.14
+instance ToLogStr Integer where
+ toLogStr = toLogStr . B.integerDec
+-- | @since 2.4.14
+instance ToLogStr Float where
+ toLogStr = toLogStr . B.floatDec
+-- | @since 2.4.14
+instance ToLogStr Double where
+ toLogStr = toLogStr . B.doubleDec
+
instance Show LogStr where
show = show . T.decodeUtf8 . fromLogStr
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fast-logger-2.4.13/fast-logger.cabal new/fast-logger-2.4.15/fast-logger.cabal
--- old/fast-logger-2.4.13/fast-logger.cabal 2018-12-25 03:45:26.000000000 +0100
+++ new/fast-logger-2.4.15/fast-logger.cabal 2019-04-11 07:09:10.000000000 +0200
@@ -1,5 +1,5 @@
Name: fast-logger
-Version: 2.4.13
+Version: 2.4.15
Author: Kazu Yamamoto <kazu(a)iij.ad.jp>
Maintainer: Kazu Yamamoto <kazu(a)iij.ad.jp>
License: BSD3
@@ -44,6 +44,7 @@
Ghc-Options: -Wall -threaded
Other-Modules: FastLoggerSpec
+ Build-Tools: hspec-discover >= 2.6
Build-Depends: base >= 4 && < 5
, bytestring
, directory
1
0
Hello community,
here is the log from the commit of package ghc-extra for openSUSE:Factory checked in at 2019-04-28 20:12:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-extra (Old)
and /work/SRC/openSUSE:Factory/.ghc-extra.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-extra"
Sun Apr 28 20:12:35 2019 rev:20 rq:698549 version:1.6.15
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-extra/ghc-extra.changes 2018-12-21 08:21:26.117569095 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-extra.new.5536/ghc-extra.changes 2019-04-28 20:12:47.294443281 +0200
@@ -1,0 +2,9 @@
+Tue Apr 23 02:01:56 UTC 2019 - psimons(a)suse.com
+
+- Update extra to version 1.6.15.
+ 1.6.15, released 2019-04-22
+ #45, add NonEmpty.Extra for extra appending functions
+ #42, add fromMaybeM
+ Remove support for GHC 7.4, 7.6 and 7.8
+
+-------------------------------------------------------------------
Old:
----
extra-1.6.14.tar.gz
New:
----
extra-1.6.15.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-extra.spec ++++++
--- /var/tmp/diff_new_pack.IJzstb/_old 2019-04-28 20:12:48.286442665 +0200
+++ /var/tmp/diff_new_pack.IJzstb/_new 2019-04-28 20:12:48.286442665 +0200
@@ -1,7 +1,7 @@
#
# spec file for package ghc-extra
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%global pkg_name extra
%bcond_with tests
Name: ghc-%{pkg_name}
-Version: 1.6.14
+Version: 1.6.15
Release: 0
Summary: Extra functions I use
License: BSD-3-Clause
@@ -32,6 +32,7 @@
BuildRequires: ghc-filepath-devel
BuildRequires: ghc-process-devel
BuildRequires: ghc-rpm-macros
+BuildRequires: ghc-semigroups-devel
BuildRequires: ghc-time-devel
BuildRequires: ghc-unix-devel
%if %{with tests}
++++++ extra-1.6.14.tar.gz -> extra-1.6.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/CHANGES.txt new/extra-1.6.15/CHANGES.txt
--- old/extra-1.6.14/CHANGES.txt 2018-12-10 20:24:13.000000000 +0100
+++ new/extra-1.6.15/CHANGES.txt 2019-04-22 20:26:14.000000000 +0200
@@ -1,5 +1,9 @@
Changelog for Extra
+1.6.15, released 2019-04-22
+ #45, add NonEmpty.Extra for extra appending functions
+ #42, add fromMaybeM
+ Remove support for GHC 7.4, 7.6 and 7.8
1.6.14, released 2018-12-10
Add mapLeft and mapRight
1.6.13, released 2018-10-14
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/Generate.hs new/extra-1.6.15/Generate.hs
--- old/extra-1.6.14/Generate.hs 2017-11-24 12:54:00.000000000 +0100
+++ new/extra-1.6.15/Generate.hs 2019-04-22 20:25:59.000000000 +0200
@@ -37,11 +37,11 @@
,"module Extra {-# DEPRECATED \"This module is provided as documentation of all new functions, you should import the more specific modules directly.\" #-} ("] ++
concat [ [" -- * " ++ mod
," -- | Extra functions available in @" ++ show mod ++ "@."
- ," " ++ unwords (map (++",") funs)]
- | (mod,funs,_) <- ifaces] ++
+ ," " ++ unwords (map (++",") $ filter (notHidden mod) funs)]
+ | (mod,funs@(_:_),_) <- ifaces] ++
[" ) where"
,""] ++
- ["import " ++ x | x <- mods]
+ ["import " ++ addHiding mod | (mod,_:_,_) <- ifaces]
writeFileBinaryChanged "test/TestGen.hs" $ unlines $
["-- GENERATED CODE - DO NOT MODIFY"
,"-- See Generate.hs for details of how to generate"
@@ -66,6 +66,17 @@
when (Just x /= old) $
writeFileBinary file x
+hidden :: String -> [String]
+hidden "Data.List.NonEmpty.Extra" = ["cons", "snoc", "sortOn", "union", "unionBy"]
+hidden _ = []
+
+notHidden :: String -> String -> Bool
+notHidden mod fun = fun `notElem` hidden mod
+
+addHiding :: String -> String
+addHiding mod
+ | xs@(_:_) <- hidden mod = mod ++ " hiding (" ++ intercalate ", " xs ++ ")"
+ | otherwise = mod
validIdentifier xs =
(take 1 xs == "(" || isName (takeWhile (/= '(') xs)) &&
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/LICENSE new/extra-1.6.15/LICENSE
--- old/extra-1.6.14/LICENSE 2018-01-21 17:16:40.000000000 +0100
+++ new/extra-1.6.15/LICENSE 2019-02-25 16:47:08.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright Neil Mitchell 2014-2018.
+Copyright Neil Mitchell 2014-2019.
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/README.md new/extra-1.6.15/README.md
--- old/extra-1.6.14/README.md 2018-05-21 20:30:10.000000000 +0200
+++ new/extra-1.6.15/README.md 2019-04-22 20:25:59.000000000 +0200
@@ -1,11 +1,11 @@
-# Extra [![Hackage version](https://img.shields.io/hackage/v/extra.svg?label=Hackage)](https:/… [![Stackage version](https://www.stackage.org/package/extra/badge/nightly?label=Stackag… [![Linux Build Status](https://img.shields.io/travis/ndmitchell/extra/master.svg?label=Lin… [![Windows Build Status](https://img.shields.io/appveyor/ci/ndmitchell/extra/master.svg?labe…
+# Extra [![Hackage version](https://img.shields.io/hackage/v/extra.svg?label=Hackage)](https:/… [![Stackage version](https://www.stackage.org/package/extra/badge/nightly?label=Stackag… [![Linux build status](https://img.shields.io/travis/ndmitchell/extra/master.svg?label=Lin… [![Windows build status](https://img.shields.io/appveyor/ci/ndmitchell/extra/master.svg?labe…
-A library of extra functions for the standard Haskell libraries. Most functions are simple additions, filling out missing functionality. A few functions are available in later versions of GHC, but this package makes them available back to GHC 7.2. A few examples:
+A library of extra functions for the standard Haskell libraries. Most functions are simple additions, filling out missing functionality. A few functions are available in later versions of GHC, but this package makes them available back to GHC 7.10. A few examples:
* `Control.Monad.Extra.concatMapM` provides a monadic version of `concatMap`, in the same way that `mapM` is a monadic version of `map`.
* `Data.Tuple.Extra.fst3` provides a function to get the first element of a triple.
* `Control.Exception.Extra.retry` provides a function that retries an `IO` action a number of times.
-* `System.Environment.Extra.lookupEnv` is a function available in GHC 7.6 and above. On GHC 7.6 and above this package reexports the version from `System.Environment` while on GHC 7.4 and below it defines an equivalent version.
+* `Data.Either.Extra.fromLeft` is a function available in GHC 8.0 and above. On GHC 8.0 and above this package reexports the version from `Data.Either` while on GHC 7.10 and below it defines an equivalent version.
The module `Extra` documents all functions provided by this library. Modules such as `Data.List.Extra` provide extra functions over `Data.List` and also reexport `Data.List`. Users are recommended to replace `Data.List` imports with `Data.List.Extra` if they need the extra functionality.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/extra.cabal new/extra-1.6.15/extra.cabal
--- old/extra-1.6.14/extra.cabal 2018-12-10 20:24:24.000000000 +0100
+++ new/extra-1.6.15/extra.cabal 2019-04-22 20:32:36.000000000 +0200
@@ -1,13 +1,13 @@
cabal-version: >= 1.18
build-type: Simple
name: extra
-version: 1.6.14
+version: 1.6.15
license: BSD3
license-file: LICENSE
category: Development
author: Neil Mitchell <ndmitchell(a)gmail.com>
maintainer: Neil Mitchell <ndmitchell(a)gmail.com>
-copyright: Neil Mitchell 2014-2018
+copyright: Neil Mitchell 2014-2019
synopsis: Extra functions I use.
description:
A library of extra functions for the standard Haskell libraries. Most functions are simple additions, filling out missing functionality. A few functions are available in later versions of GHC, but this package makes them available back to GHC 7.2.
@@ -15,7 +15,7 @@
The module "Extra" documents all functions provided by this library. Modules such as "Data.List.Extra" provide extra functions over "Data.List" and also reexport "Data.List". Users are recommended to replace "Data.List" imports with "Data.List.Extra" if they need the extra functionality.
homepage: https://github.com/ndmitchell/extra#readme
bug-reports: https://github.com/ndmitchell/extra/issues
-tested-with: GHC==8.6.3, GHC==8.4.4, GHC==8.2.2, GHC==8.0.2, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2
+tested-with: GHC==8.6.4, GHC==8.4.4, GHC==8.2.2, GHC==8.0.2, GHC==7.10.3
extra-doc-files:
CHANGES.txt
@@ -31,11 +31,13 @@
default-language: Haskell2010
hs-source-dirs: src
build-depends:
- base >= 4.4 && < 5,
+ base >= 4.8 && < 5,
directory,
filepath,
process,
clock >= 0.7,
+ -- For GHC 7.10 since Data.List.NonEmpty wasn't in base then
+ semigroups,
time
if !os(windows)
build-depends: unix
@@ -50,6 +52,7 @@
Data.Either.Extra
Data.IORef.Extra
Data.List.Extra
+ Data.List.NonEmpty.Extra
Data.Tuple.Extra
Data.Typeable.Extra
Data.Version.Extra
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Control/Concurrent/Extra.hs new/extra-1.6.15/src/Control/Concurrent/Extra.hs
--- old/extra-1.6.14/src/Control/Concurrent/Extra.hs 2018-12-10 15:33:37.000000000 +0100
+++ new/extra-1.6.15/src/Control/Concurrent/Extra.hs 2019-02-25 16:55:33.000000000 +0100
@@ -1,5 +1,4 @@
-{-# LANGUAGE CPP, TupleSections, ConstraintKinds #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# LANGUAGE TupleSections, ConstraintKinds #-}
-- | Extra functions for "Control.Concurrent".
--
@@ -14,8 +13,8 @@
-- see the <httdp://hackage.haskell.org/package/async async> package.
module Control.Concurrent.Extra(
module Control.Concurrent,
- getNumCapabilities, setNumCapabilities, withNumCapabilities,
- forkFinally, once, onceFork,
+ withNumCapabilities,
+ once, onceFork,
-- * Lock
Lock, newLock, withLock, withLockTry,
-- * Var
@@ -43,39 +42,6 @@
withNumCapabilities _ act = act
-#if __GLASGOW_HASKELL__ < 702
--- | A version of 'getNumCapabilities' that works on all versions of GHC, but returns 1 before GHC 7.2.
-getNumCapabilities :: IO Int
-getNumCapabilities = return 1
-#endif
-
-#if __GLASGOW_HASKELL__ < 706
--- | A version of 'setNumCapabilities' that works on all versions of GHC, but has no effect before GHC 7.6.
-setNumCapabilities :: Int -> IO ()
-setNumCapabilities n = return ()
-#endif
-
-
-#if __GLASGOW_HASKELL__ < 706
--- | fork a thread and call the supplied function when the thread is about
--- to terminate, with an exception or a returned value. The function is
--- called with asynchronous exceptions masked.
---
--- @
--- 'forkFinally' action and_then =
--- mask $ \restore ->
--- forkIO $ try (restore action) >>= and_then
--- @
---
--- This function is useful for informing the parent when a child
--- terminates, for example.
-forkFinally :: IO a -> (Either SomeException a -> IO ()) -> IO ThreadId
-forkFinally action and_then =
- mask $ \restore ->
- forkIO $ try (restore action) >>= and_then
-#endif
-
-
-- | Given an action, produce a wrapped action that runs at most once.
-- If the function raises an exception, the same exception will be reraised each time.
--
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Control/Exception/Extra.hs new/extra-1.6.15/src/Control/Exception/Extra.hs
--- old/extra-1.6.14/src/Control/Exception/Extra.hs 2018-12-10 15:34:38.000000000 +0100
+++ new/extra-1.6.15/src/Control/Exception/Extra.hs 2019-02-25 16:56:30.000000000 +0100
@@ -13,7 +13,7 @@
retry, retryBool,
errorWithoutStackTrace,
showException, stringException,
- errorIO, displayException,
+ errorIO,
-- * Exception catching/ignoring
ignore,
catch_, handle_, try_,
@@ -52,13 +52,6 @@
showException = stringException . show
-#if __GLASGOW_HASKELL__ < 710
--- | Render this exception value in a human-friendly manner.
--- Part of the 'Exception' class in GHC 7.10 onwards.
-displayException :: Exception e => e -> String
-displayException = show
-#endif
-
#if __GLASGOW_HASKELL__ < 800
-- | A variant of 'error' that does not produce a stack trace.
errorWithoutStackTrace :: String -> a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Control/Monad/Extra.hs new/extra-1.6.15/src/Control/Monad/Extra.hs
--- old/extra-1.6.14/src/Control/Monad/Extra.hs 2018-12-07 12:00:34.000000000 +0100
+++ new/extra-1.6.15/src/Control/Monad/Extra.hs 2019-04-22 20:25:59.000000000 +0200
@@ -9,7 +9,7 @@
whenJust, whenJustM,
whenMaybe, whenMaybeM,
unit,
- maybeM, eitherM,
+ maybeM, fromMaybeM, eitherM,
-- * Loops
loop, loopM, whileM,
-- * Lists
@@ -70,6 +70,11 @@
maybeM n j x = maybe n j =<< x
+-- | Monadic generalisation of 'fromMaybe'.
+fromMaybeM :: Monad m => m a -> m (Maybe a) -> m a
+fromMaybeM n x = maybe n pure =<< x
+
+
-- | Monadic generalisation of 'either'.
eitherM :: Monad m => (a -> m c) -> (b -> m c) -> m (Either a b) -> m c
eitherM l r x = either l r =<< x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Data/Either/Extra.hs new/extra-1.6.15/src/Data/Either/Extra.hs
--- old/extra-1.6.14/src/Data/Either/Extra.hs 2018-12-10 16:20:39.000000000 +0100
+++ new/extra-1.6.15/src/Data/Either/Extra.hs 2019-02-25 16:58:14.000000000 +0100
@@ -9,7 +9,7 @@
-- <https://hackage.haskell.org/package/either either>.
module Data.Either.Extra(
module Data.Either,
- isLeft, isRight, fromLeft, fromRight, fromEither,
+ fromLeft, fromRight, fromEither,
fromLeft', fromRight',
eitherToMaybe, maybeToEither,
mapLeft, mapRight,
@@ -61,18 +61,6 @@
fromRight' _ = error "fromRight', given a Left"
-#if __GLASGOW_HASKELL__ < 708
--- | Test if an 'Either' value is the 'Left' constructor.
--- Provided as standard with GHC 7.8 and above.
-isLeft :: Either l r -> Bool
-isLeft Left{} = True; isLeft _ = False
-
--- | Test if an 'Either' value is the 'Right' constructor.
--- Provided as standard with GHC 7.8 and above.
-isRight :: Either l r -> Bool
-isRight Right{} = True; isRight _ = False
-#endif
-
-- | Pull the value out of an 'Either' where both alternatives
-- have the same type.
--
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Data/IORef/Extra.hs new/extra-1.6.15/src/Data/IORef/Extra.hs
--- old/extra-1.6.14/src/Data/IORef/Extra.hs 2017-05-09 22:38:47.000000000 +0200
+++ new/extra-1.6.15/src/Data/IORef/Extra.hs 2019-02-25 16:55:23.000000000 +0100
@@ -1,11 +1,9 @@
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-- | This module extends "Data.IORef" with operations forcing the value written to the IORef.
-- Some of these functions are available in later versions of GHC, but not all.
module Data.IORef.Extra(
module Data.IORef,
- modifyIORef', writeIORef', atomicModifyIORef', atomicWriteIORef, atomicWriteIORef'
+ writeIORef', atomicWriteIORef'
) where
import Data.IORef
@@ -23,30 +21,3 @@
atomicWriteIORef' ref x = do
evaluate x
atomicWriteIORef ref x
-
-
-#if __GLASGOW_HASKELL__ < 706
-
--- | Version of 'modifyIORef' that evaluates the function.
-modifyIORef' :: IORef a -> (a -> a) -> IO ()
-modifyIORef' ref f = do
- x <- readIORef ref
- writeIORef' ref $ f x
-
--- | Strict version of 'atomicModifyIORef'. This forces both the value stored
--- in the 'IORef' as well as the value returned.
-atomicModifyIORef' :: IORef a -> (a -> (a,b)) -> IO b
-atomicModifyIORef' ref f = do
- b <- atomicModifyIORef ref
- (\x -> let (a, b) = f x
- in (a, a `seq` b))
- b `seq` return b
-
--- | Variant of 'writeIORef' with the \"barrier to reordering\" property that
--- 'atomicModifyIORef' has.
-atomicWriteIORef :: IORef a -> a -> IO ()
-atomicWriteIORef ref a = do
- x <- atomicModifyIORef ref $ const (a, ())
- x `seq` return ()
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Data/List/Extra.hs new/extra-1.6.15/src/Data/List/Extra.hs
--- old/extra-1.6.14/src/Data/List/Extra.hs 2018-12-07 12:00:54.000000000 +0100
+++ new/extra-1.6.15/src/Data/List/Extra.hs 2019-02-25 16:59:08.000000000 +0100
@@ -1,5 +1,4 @@
-{-# LANGUAGE CPP, TupleSections, BangPatterns, ConstraintKinds #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# LANGUAGE TupleSections, BangPatterns, ConstraintKinds #-}
-- | This module extends "Data.List" with extra functions of a similar nature.
-- The package also exports the existing "Data.List" functions.
@@ -13,17 +12,17 @@
unescapeHTML, unescapeJSON,
-- * Splitting
dropEnd, takeEnd, splitAtEnd, breakEnd, spanEnd,
- dropWhileEnd, dropWhileEnd', takeWhileEnd,
+ dropWhileEnd', takeWhileEnd,
stripSuffix, stripInfix, stripInfixEnd,
dropPrefix, dropSuffix,
wordsBy, linesBy,
breakOn, breakOnEnd, splitOn, split, chunksOf,
-- * Basics
- notNull, list, uncons, unsnoc, cons, snoc, drop1, mconcatMap,
+ notNull, list, unsnoc, cons, snoc, drop1, mconcatMap,
-- * List operations
groupSort, groupSortOn, groupSortBy,
nubOrd, nubOrdBy, nubOrdOn,
- nubOn, groupOn, sortOn,
+ nubOn, groupOn,
nubSort, nubSortBy, nubSortOn,
maximumOn, minimumOn,
disjoint, allSame, anySame,
@@ -114,17 +113,6 @@
list nil cons [] = nil
list nil cons (x:xs) = cons x xs
-#if __GLASGOW_HASKELL__ < 709
--- | If the list is empty returns 'Nothing', otherwise returns the 'head' and the 'tail'.
---
--- > uncons "test" == Just ('t',"est")
--- > uncons "" == Nothing
--- > \xs -> uncons xs == if null xs then Nothing else Just (head xs, tail xs)
-uncons :: [a] -> Maybe (a, [a])
-uncons [] = Nothing
-uncons (x:xs) = Just (x,xs)
-#endif
-
-- | If the list is empty returns 'Nothing', otherwise returns the 'init' and the 'last'.
--
-- > unsnoc "test" == Just ("tes",'t')
@@ -353,18 +341,6 @@
unescapeJSON [] = []
-#if __GLASGOW_HASKELL__ < 709
--- | Sort a list by comparing the results of a key function applied to each
--- element. @sortOn f@ is equivalent to @sortBy (comparing f)@, but has the
--- performance advantage of only evaluating @f@ once for each element in the
--- input list. This is called the decorate-sort-undecorate paradigm, or
--- Schwartzian transform.
---
--- > sortOn fst [(3,"z"),(1,""),(3,"a")] == [(1,""),(3,"z"),(3,"a")]
-sortOn :: Ord b => (a -> b) -> [a] -> [a]
-sortOn f = map snd . sortBy (compare `on` fst) . map (\x -> let y = f x in y `seq` (y, x))
-#endif
-
-- | A version of 'group' where the equality is done on some extracted value.
groupOn :: Eq b => (a -> b) -> [a] -> [[a]]
groupOn f = groupBy ((==) `on2` f)
@@ -571,12 +547,6 @@
split f (x:xs) | y:ys <- split f xs = (x:y) : ys
-#if __GLASGOW_HASKELL__ < 704
-dropWhileEnd :: (a -> Bool) -> [a] -> [a]
-dropWhileEnd p = foldr (\x xs -> if p x && null xs then [] else x : xs) []
-#endif
-
-
-- | A version of 'dropWhileEnd' but with different strictness properties.
-- The function 'dropWhileEnd' can be used on an infinite list and tests the property
-- on each character. In contrast, 'dropWhileEnd'' is strict in the spine of the list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Data/List/NonEmpty/Extra.hs new/extra-1.6.15/src/Data/List/NonEmpty/Extra.hs
--- old/extra-1.6.14/src/Data/List/NonEmpty/Extra.hs 1970-01-01 01:00:00.000000000 +0100
+++ new/extra-1.6.15/src/Data/List/NonEmpty/Extra.hs 2019-04-22 20:25:59.000000000 +0200
@@ -0,0 +1,93 @@
+{-# LANGUAGE CPP #-}
+
+-- | Extra functions for working with 'NonEmpty' lists. The package
+-- also exports the existing "Data.List.NonEmpty" functions.
+module Data.List.NonEmpty.Extra(
+ module Data.List.NonEmpty,
+ (|:), (|>), snoc,
+ appendl, appendr,
+ sortOn, union, unionBy,
+ maximum1, minimum1, maximumBy1, minimumBy1, maximumOn1, minimumOn1
+ ) where
+
+import Data.Function
+import qualified Data.List as List
+import Data.List.NonEmpty
+
+#if __GLASGOW_HASKELL__ <= 802
+import Data.Semigroup ((<>))
+#endif
+
+infixl 5 |>, |:
+
+-- | /O(n)/. Append an element to a non-empty list.
+--
+-- > (1 :| [2,3]) |> 4 |> 5 == 1 :| [2,3,4,5]
+(|>) :: NonEmpty a -> a -> NonEmpty a
+(|>) xs x = xs <> pure x
+
+-- | Synonym for '|>'.
+snoc :: NonEmpty a -> a -> NonEmpty a
+snoc = (|>)
+
+-- | /O(n)/. Append an element to a list.
+--
+-- > [1,2,3] |: 4 |> 5 == 1 :| [2,3,4,5]
+(|:) :: [a] -> a -> NonEmpty a
+(|:) xs x = foldr cons (pure x) xs
+
+-- | Append a list to a non-empty list.
+--
+-- > appendl (1 :| [2,3]) [4,5] == 1 :| [2,3,4,5]
+appendl :: NonEmpty a -> [a] -> NonEmpty a
+appendl (x :| xs) l = x :| (xs ++ l)
+
+-- | Append a non-empty list to a list.
+--
+-- > appendr [1,2,3] (4 :| [5]) == 1 :| [2,3,4,5]
+appendr :: [a] -> NonEmpty a -> NonEmpty a
+appendr l nel = foldr cons nel l
+
+-- | Sort by comparing the results of a function applied to each element.
+-- The sort is stable, and the function is evaluated only once for
+-- each element.
+sortOn :: Ord b => (a -> b) -> NonEmpty a -> NonEmpty a
+sortOn f = fromList . List.sortOn f . toList
+
+-- | Return the union of two non-empty lists. Duplicates, and elements of the
+-- first list, are removed from the the second list, but if the first list
+-- contains duplicates, so will the result.
+--
+-- > (1 :| [3, 5, 3]) `union` (4 :| [5, 3, 5, 2]) == 1 :| [3, 5, 3, 4, 2]
+union :: Eq a => NonEmpty a -> NonEmpty a -> NonEmpty a
+union = unionBy (==)
+
+-- | The non-overloaded version of 'union'.
+unionBy :: (a -> a -> Bool) -> NonEmpty a -> NonEmpty a -> NonEmpty a
+unionBy eq xs ys = fromList $ List.unionBy eq (toList xs) (toList ys)
+
+-- | The largest element of a non-empty list.
+maximum1 :: Ord a => NonEmpty a -> a
+maximum1 = List.maximum
+
+-- | The least element of a non-empty list.
+minimum1 :: Ord a => NonEmpty a -> a
+minimum1 = List.minimum
+
+-- | The largest element of a non-empty list with respect to the given
+-- comparison function.
+maximumBy1 :: (a -> a -> Ordering) -> NonEmpty a -> a
+maximumBy1 = List.maximumBy
+
+-- | The least element of a non-empty list with respect to the given
+-- comparison function.
+minimumBy1 :: (a -> a -> Ordering) -> NonEmpty a -> a
+minimumBy1 = List.minimumBy
+
+-- | A version of 'maximum1' where the comparison is done on some extracted value.
+maximumOn1 :: Ord b => (a -> b) -> NonEmpty a -> a
+maximumOn1 f = maximumBy1 (compare `on` f)
+
+-- | A version of 'minimum1' where the comparison is done on some extracted value.
+minimumOn1 :: Ord b => (a -> b) -> NonEmpty a -> a
+minimumOn1 f = minimumBy1 (compare `on` f)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Data/Typeable/Extra.hs new/extra-1.6.15/src/Data/Typeable/Extra.hs
--- old/extra-1.6.14/src/Data/Typeable/Extra.hs 2016-06-15 20:34:55.000000000 +0200
+++ new/extra-1.6.15/src/Data/Typeable/Extra.hs 2019-02-25 17:04:47.000000000 +0100
@@ -1,129 +1,10 @@
-{-# LANGUAGE CPP, ScopedTypeVariables, TypeOperators, GADTs, StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-- | This module extends "Data.Typeable" with extra functions available in later GHC versions.
-- The package also exports the existing "Data.Typeable" functions.
+--
+-- Currently this module has no functionality beyond "Data.Typeable".
module Data.Typeable.Extra(
- typeRep, (:~:)(..), Proxy(..),
module Data.Typeable
) where
import Data.Typeable
-
-#if __GLASGOW_HASKELL__ < 708
-
-import Data.Ix
-import Data.Monoid
-import Control.Monad
-import Control.Applicative
-
-
--- | Takes a value of type @a@ and returns a concrete representation
--- of that type.
---
--- > typeRep (Proxy :: Proxy Int) == typeOf (1 :: Int)
-typeRep :: forall proxy a. Typeable a => proxy a -> TypeRep
-typeRep _ = typeOf (undefined :: a)
-
-
-infix 4 :~:
-
--- | Propositional equality. If @a :~: b@ is inhabited by some terminating
--- value, then the type @a@ is the same as the type @b@. To use this equality
--- in practice, pattern-match on the @a :~: b@ to get out the @Refl@ constructor;
--- in the body of the pattern-match, the compiler knows that @a ~ b@.
-data a :~: b where
- Refl :: a :~: a
-
-deriving instance Eq (a :~: b)
-deriving instance Show (a :~: b)
-deriving instance Ord (a :~: b)
-
-instance a ~ b => Read (a :~: b) where
- readsPrec d = readParen (d > 10) (\r -> [(Refl, s) | ("Refl",s) <- lex r ])
-
-instance a ~ b => Enum (a :~: b) where
- toEnum 0 = Refl
- toEnum _ = errorWithoutStackTrace "Data.Type.Equality.toEnum: bad argument"
-
- fromEnum Refl = 0
-
-instance a ~ b => Bounded (a :~: b) where
- minBound = Refl
- maxBound = Refl
-
-
-
--- | A canonical proxy type
-data Proxy t = Proxy
-
--- It's common to use (undefined :: Proxy t) and (Proxy :: Proxy t)
--- interchangeably, so all of these instances are hand-written to be
--- lazy in Proxy arguments.
-
-instance Eq (Proxy s) where
- _ == _ = True
-
-instance Ord (Proxy s) where
- compare _ _ = EQ
-
-instance Show (Proxy s) where
- showsPrec _ _ = showString "Proxy"
-
-instance Read (Proxy s) where
- readsPrec d = readParen (d > 10) (\r -> [(Proxy, s) | ("Proxy",s) <- lex r ])
-
-errorWithoutStackTrace = error
-
-instance Enum (Proxy s) where
- succ _ = errorWithoutStackTrace "Proxy.succ"
- pred _ = errorWithoutStackTrace "Proxy.pred"
- fromEnum _ = 0
- toEnum 0 = Proxy
- toEnum _ = errorWithoutStackTrace "Proxy.toEnum: 0 expected"
- enumFrom _ = [Proxy]
- enumFromThen _ _ = [Proxy]
- enumFromThenTo _ _ _ = [Proxy]
- enumFromTo _ _ = [Proxy]
-
-instance Ix (Proxy s) where
- range _ = [Proxy]
- index _ _ = 0
- inRange _ _ = True
- rangeSize _ = 1
-
-instance Bounded (Proxy s) where
- minBound = Proxy
- maxBound = Proxy
-
-instance Monoid (Proxy s) where
- mempty = Proxy
- mappend _ _ = Proxy
- mconcat _ = Proxy
-
-instance Functor Proxy where
- fmap _ _ = Proxy
- {-# INLINE fmap #-}
-
-instance Applicative Proxy where
- pure _ = Proxy
- {-# INLINE pure #-}
- _ <*> _ = Proxy
- {-# INLINE (<*>) #-}
-
-instance Alternative Proxy where
- empty = Proxy
- {-# INLINE empty #-}
- _ <|> _ = Proxy
- {-# INLINE (<|>) #-}
-
-instance Monad Proxy where
- return = pure
- _ >>= _ = Proxy
- {-# INLINE (>>=) #-}
-
-instance MonadPlus Proxy where
- mzero = empty
- mplus = (<|>)
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Data/Version/Extra.hs new/extra-1.6.15/src/Data/Version/Extra.hs
--- old/extra-1.6.14/src/Data/Version/Extra.hs 2017-12-07 13:09:51.000000000 +0100
+++ new/extra-1.6.15/src/Data/Version/Extra.hs 2019-02-25 17:05:16.000000000 +0100
@@ -1,11 +1,10 @@
-{-# LANGUAGE CPP, ConstraintKinds #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# LANGUAGE ConstraintKinds #-}
-- | This module extends "Data.Version" with extra utilities.
-- The package also exports the existing "Data.Version" functions.
module Data.Version.Extra(
module Data.Version,
- makeVersion, readVersion
+ readVersion
) where
import Partial
@@ -14,16 +13,6 @@
import Text.ParserCombinators.ReadP
-#if __GLASGOW_HASKELL__ < 710
-
--- | Construct tag-less 'Version'
---
--- > showVersion (makeVersion [1,2,3]) == "1.2.3"
-makeVersion :: [Int] -> Version
-makeVersion b = Version b []
-
-#endif
-
-- | Read a 'Version' or throw an exception.
--
-- > \x -> readVersion (showVersion x) == x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Extra.hs new/extra-1.6.15/src/Extra.hs
--- old/extra-1.6.14/src/Extra.hs 2018-12-10 15:41:09.000000000 +0100
+++ new/extra-1.6.15/src/Extra.hs 2019-04-22 20:25:59.000000000 +0200
@@ -8,40 +8,37 @@
module Extra {-# DEPRECATED "This module is provided as documentation of all new functions, you should import the more specific modules directly." #-} (
-- * Control.Concurrent.Extra
-- | Extra functions available in @"Control.Concurrent.Extra"@.
- getNumCapabilities, setNumCapabilities, withNumCapabilities, forkFinally, once, onceFork, Lock, newLock, withLock, withLockTry, Var, newVar, readVar, writeVar, modifyVar, modifyVar_, withVar, Barrier, newBarrier, signalBarrier, waitBarrier, waitBarrierMaybe,
+ withNumCapabilities, once, onceFork, Lock, newLock, withLock, withLockTry, Var, newVar, readVar, writeVar, modifyVar, modifyVar_, withVar, Barrier, newBarrier, signalBarrier, waitBarrier, waitBarrierMaybe,
-- * Control.Exception.Extra
-- | Extra functions available in @"Control.Exception.Extra"@.
- Partial, retry, retryBool, errorWithoutStackTrace, showException, stringException, errorIO, displayException, ignore, catch_, handle_, try_, catchJust_, handleJust_, tryJust_, catchBool, handleBool, tryBool,
+ Partial, retry, retryBool, errorWithoutStackTrace, showException, stringException, errorIO, ignore, catch_, handle_, try_, catchJust_, handleJust_, tryJust_, catchBool, handleBool, tryBool,
-- * Control.Monad.Extra
-- | Extra functions available in @"Control.Monad.Extra"@.
- whenJust, whenJustM, whenMaybe, whenMaybeM, unit, maybeM, eitherM, loop, loopM, whileM, partitionM, concatMapM, concatForM, mconcatMapM, mapMaybeM, findM, firstJustM, fold1M, fold1M_, whenM, unlessM, ifM, notM, (||^), (&&^), orM, andM, anyM, allM,
+ whenJust, whenJustM, whenMaybe, whenMaybeM, unit, maybeM, fromMaybeM, eitherM, loop, loopM, whileM, partitionM, concatMapM, concatForM, mconcatMapM, mapMaybeM, findM, firstJustM, fold1M, fold1M_, whenM, unlessM, ifM, notM, (||^), (&&^), orM, andM, anyM, allM,
-- * Data.Either.Extra
-- | Extra functions available in @"Data.Either.Extra"@.
- isLeft, isRight, fromLeft, fromRight, fromEither, fromLeft', fromRight', eitherToMaybe, maybeToEither, mapLeft, mapRight,
+ fromLeft, fromRight, fromEither, fromLeft', fromRight', eitherToMaybe, maybeToEither, mapLeft, mapRight,
-- * Data.IORef.Extra
-- | Extra functions available in @"Data.IORef.Extra"@.
- modifyIORef', writeIORef', atomicModifyIORef', atomicWriteIORef, atomicWriteIORef',
+ writeIORef', atomicWriteIORef',
-- * Data.List.Extra
-- | Extra functions available in @"Data.List.Extra"@.
- lower, upper, trim, trimStart, trimEnd, word1, line1, escapeHTML, escapeJSON, unescapeHTML, unescapeJSON, dropEnd, takeEnd, splitAtEnd, breakEnd, spanEnd, dropWhileEnd, dropWhileEnd', takeWhileEnd, stripSuffix, stripInfix, stripInfixEnd, dropPrefix, dropSuffix, wordsBy, linesBy, breakOn, breakOnEnd, splitOn, split, chunksOf, notNull, list, uncons, unsnoc, cons, snoc, drop1, mconcatMap, groupSort, groupSortOn, groupSortBy, nubOrd, nubOrdBy, nubOrdOn, nubOn, groupOn, sortOn, nubSort, nubSortBy, nubSortOn, maximumOn, minimumOn, disjoint, allSame, anySame, repeatedly, for, firstJust, concatUnzip, concatUnzip3, zipFrom, zipWithFrom, replace, merge, mergeBy,
+ lower, upper, trim, trimStart, trimEnd, word1, line1, escapeHTML, escapeJSON, unescapeHTML, unescapeJSON, dropEnd, takeEnd, splitAtEnd, breakEnd, spanEnd, dropWhileEnd', takeWhileEnd, stripSuffix, stripInfix, stripInfixEnd, dropPrefix, dropSuffix, wordsBy, linesBy, breakOn, breakOnEnd, splitOn, split, chunksOf, notNull, list, unsnoc, cons, snoc, drop1, mconcatMap, groupSort, groupSortOn, groupSortBy, nubOrd, nubOrdBy, nubOrdOn, nubOn, groupOn, nubSort, nubSortBy, nubSortOn, maximumOn, minimumOn, disjoint, allSame, anySame, repeatedly, for, firstJust, concatUnzip, concatUnzip3, zipFrom, zipWithFrom, replace, merge, mergeBy,
+ -- * Data.List.NonEmpty.Extra
+ -- | Extra functions available in @"Data.List.NonEmpty.Extra"@.
+ (|:), (|>), appendl, appendr, maximum1, minimum1, maximumBy1, minimumBy1, maximumOn1, minimumOn1,
-- * Data.Tuple.Extra
-- | Extra functions available in @"Data.Tuple.Extra"@.
first, second, (***), (&&&), dupe, both, fst3, snd3, thd3, curry3, uncurry3,
- -- * Data.Typeable.Extra
- -- | Extra functions available in @"Data.Typeable.Extra"@.
- typeRep, (:~:)(..), Proxy(..),
-- * Data.Version.Extra
-- | Extra functions available in @"Data.Version.Extra"@.
- makeVersion, readVersion,
+ readVersion,
-- * Numeric.Extra
-- | Extra functions available in @"Numeric.Extra"@.
showDP, intToDouble, intToFloat, floatToDouble, doubleToFloat,
-- * System.Directory.Extra
-- | Extra functions available in @"System.Directory.Extra"@.
withCurrentDirectory, createDirectoryPrivate, listContents, listDirectories, listFiles, listFilesInside, listFilesRecursive,
- -- * System.Environment.Extra
- -- | Extra functions available in @"System.Environment.Extra"@.
- getExecutablePath, lookupEnv,
-- * System.Info.Extra
-- | Extra functions available in @"System.Info.Extra"@.
isWindows, isMac,
@@ -54,9 +51,6 @@
-- * System.Time.Extra
-- | Extra functions available in @"System.Time.Extra"@.
Seconds, sleep, timeout, showDuration, offsetTime, offsetTimeIncrease, duration,
- -- * Text.Read.Extra
- -- | Extra functions available in @"Text.Read.Extra"@.
- readEither, readMaybe,
) where
import Control.Concurrent.Extra
@@ -65,14 +59,12 @@
import Data.Either.Extra
import Data.IORef.Extra
import Data.List.Extra
+import Data.List.NonEmpty.Extra hiding (cons, snoc, sortOn, union, unionBy)
import Data.Tuple.Extra
-import Data.Typeable.Extra
import Data.Version.Extra
import Numeric.Extra
import System.Directory.Extra
-import System.Environment.Extra
import System.Info.Extra
import System.IO.Extra
import System.Process.Extra
import System.Time.Extra
-import Text.Read.Extra
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Numeric/Extra.hs new/extra-1.6.15/src/Numeric/Extra.hs
--- old/extra-1.6.14/src/Numeric/Extra.hs 2016-07-02 05:59:24.000000000 +0200
+++ new/extra-1.6.15/src/Numeric/Extra.hs 2019-02-25 16:47:08.000000000 +0100
@@ -7,7 +7,7 @@
) where
import Numeric
-import Control.Arrow
+
---------------------------------------------------------------------
-- Data.String
@@ -18,8 +18,7 @@
-- > showDP 0 pi == "3"
-- > showDP 2 3 == "3.00"
showDP :: RealFloat a => Int -> a -> String
-showDP n x = a ++ (if n > 0 then "." else "") ++ b ++ replicate (n - length b) '0'
- where (a,b) = second (drop 1) $ break (== '.') $ showFFloat (Just n) x ""
+showDP n x = showFFloat (Just n) x ""
---------------------------------------------------------------------
@@ -40,5 +39,3 @@
-- | Specialised numeric conversion, type restricted version of 'realToFrac'.
doubleToFloat :: Double -> Float
doubleToFloat = realToFrac
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/System/Environment/Extra.hs new/extra-1.6.15/src/System/Environment/Extra.hs
--- old/extra-1.6.14/src/System/Environment/Extra.hs 2017-05-09 22:38:47.000000000 +0200
+++ new/extra-1.6.15/src/System/Environment/Extra.hs 2019-02-25 17:06:01.000000000 +0100
@@ -1,26 +1,10 @@
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-- | Extra functions for "System.Environment". All these functions are available in later GHC versions,
-- but this code works all the way back to GHC 7.2.
+--
+-- Currently this module has no functionality beyond "System.Environment".
module System.Environment.Extra(
module System.Environment,
- getExecutablePath, lookupEnv
) where
import System.Environment
-
-#if __GLASGOW_HASKELL__ < 706
-import Control.Exception.Extra
-import System.IO.Error
-import Data.Functor
-
--- | Alias for 'getProgName' in GHC 7.4 and below, otherwise
--- returns the absolute pathname of the current executable.
-getExecutablePath :: IO FilePath
-getExecutablePath = getProgName
-
--- | Return the value of the environment variable var, or Nothing if there is no such value.
-lookupEnv :: String -> IO (Maybe String)
-lookupEnv x = catchBool isDoesNotExistError (Just <$> getEnv x) (const $ return Nothing)
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/src/Text/Read/Extra.hs new/extra-1.6.15/src/Text/Read/Extra.hs
--- old/extra-1.6.14/src/Text/Read/Extra.hs 2017-12-07 12:52:28.000000000 +0100
+++ new/extra-1.6.15/src/Text/Read/Extra.hs 2019-02-25 17:08:09.000000000 +0100
@@ -1,38 +1,9 @@
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-- | This module provides "Text.Read" with functions added in later versions.
+--
+-- Currently this module has no functionality beyond "Text.Read".
module Text.Read.Extra(
module Text.Read,
- readEither, readMaybe
) where
import Text.Read
-
-#if __GLASGOW_HASKELL__ < 706
-
-import Text.ParserCombinators.ReadP as P
-
--- | Parse a string using the 'Read' instance.
--- Succeeds if there is exactly one valid result.
--- A 'Left' value indicates a parse error.
-readEither :: Read a => String -> Either String a
-readEither s =
- case [ x | (x,"") <- readPrec_to_S read' minPrec s ] of
- [x] -> Right x
- [] -> Left "Prelude.read: no parse"
- _ -> Left "Prelude.read: ambiguous parse"
- where
- read' =
- do x <- readPrec
- lift P.skipSpaces
- return x
-
--- | Parse a string using the 'Read' instance.
--- Succeeds if there is exactly one valid result.
-readMaybe :: Read a => String -> Maybe a
-readMaybe s = case readEither s of
- Left _ -> Nothing
- Right a -> Just a
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/test/TestGen.hs new/extra-1.6.15/test/TestGen.hs
--- old/extra-1.6.14/test/TestGen.hs 2018-12-10 15:41:24.000000000 +0100
+++ new/extra-1.6.15/test/TestGen.hs 2019-04-22 20:25:59.000000000 +0200
@@ -94,9 +94,6 @@
testGen "list 1 (\\v _ -> v - 2) [5,6,7] == 3" $ list 1 (\v _ -> v - 2) [5,6,7] == 3
testGen "list 1 (\\v _ -> v - 2) [] == 1" $ list 1 (\v _ -> v - 2) [] == 1
testGen "\\nil cons xs -> maybe nil (uncurry cons) (uncons xs) == list nil cons xs" $ \nil cons xs -> maybe nil (uncurry cons) (uncons xs) == list nil cons xs
- testGen "uncons \"test\" == Just ('t',\"est\")" $ uncons "test" == Just ('t',"est")
- testGen "uncons \"\" == Nothing" $ uncons "" == Nothing
- testGen "\\xs -> uncons xs == if null xs then Nothing else Just (head xs, tail xs)" $ \xs -> uncons xs == if null xs then Nothing else Just (head xs, tail xs)
testGen "unsnoc \"test\" == Just (\"tes\",'t')" $ unsnoc "test" == Just ("tes",'t')
testGen "unsnoc \"\" == Nothing" $ unsnoc "" == Nothing
testGen "\\xs -> unsnoc xs == if null xs then Nothing else Just (init xs, last xs)" $ \xs -> unsnoc xs == if null xs then Nothing else Just (init xs, last xs)
@@ -151,7 +148,6 @@
testGen "escapeJSON \"\\ttab\\nnewline\\\\\" == \"\\\\ttab\\\\nnewline\\\\\\\\\"" $ escapeJSON "\ttab\nnewline\\" == "\\ttab\\nnewline\\\\"
testGen "escapeJSON \"\\ESC[0mHello\" == \"\\\\u001b[0mHello\"" $ escapeJSON "\ESC[0mHello" == "\\u001b[0mHello"
testGen "\\xs -> unescapeJSON (escapeJSON xs) == xs" $ \xs -> unescapeJSON (escapeJSON xs) == xs
- testGen "sortOn fst [(3,\"z\"),(1,\"\"),(3,\"a\")] == [(1,\"\"),(3,\"z\"),(3,\"a\")]" $ sortOn fst [(3,"z"),(1,""),(3,"a")] == [(1,""),(3,"z"),(3,"a")]
testGen "groupSort [(1,'t'),(3,'t'),(2,'e'),(2,'s')] == [(1,\"t\"),(2,\"es\"),(3,\"t\")]" $ groupSort [(1,'t'),(3,'t'),(2,'e'),(2,'s')] == [(1,"t"),(2,"es"),(3,"t")]
testGen "\\xs -> map fst (groupSort xs) == sort (nub (map fst xs))" $ \xs -> map fst (groupSort xs) == sort (nub (map fst xs))
testGen "\\xs -> concatMap snd (groupSort xs) == map snd (sortOn fst xs)" $ \xs -> concatMap snd (groupSort xs) == map snd (sortOn fst xs)
@@ -227,14 +223,17 @@
testGen "\\xs -> nubOrd xs == nub xs" $ \xs -> nubOrd xs == nub xs
testGen "nubOrdOn length [\"a\",\"test\",\"of\",\"this\"] == [\"a\",\"test\",\"of\"]" $ nubOrdOn length ["a","test","of","this"] == ["a","test","of"]
testGen "nubOrdBy (compare `on` length) [\"a\",\"test\",\"of\",\"this\"] == [\"a\",\"test\",\"of\"]" $ nubOrdBy (compare `on` length) ["a","test","of","this"] == ["a","test","of"]
+ testGen "(1 :| [2,3]) |> 4 |> 5 == 1 :| [2,3,4,5]" $ (1 :| [2,3]) |> 4 |> 5 == 1 :| [2,3,4,5]
+ testGen "[1,2,3] |: 4 |> 5 == 1 :| [2,3,4,5]" $ [1,2,3] |: 4 |> 5 == 1 :| [2,3,4,5]
+ testGen "appendl (1 :| [2,3]) [4,5] == 1 :| [2,3,4,5]" $ appendl (1 :| [2,3]) [4,5] == 1 :| [2,3,4,5]
+ testGen "appendr [1,2,3] (4 :| [5]) == 1 :| [2,3,4,5]" $ appendr [1,2,3] (4 :| [5]) == 1 :| [2,3,4,5]
+ testGen "(1 :| [3, 5, 3]) `union` (4 :| [5, 3, 5, 2]) == 1 :| [3, 5, 3, 4, 2]" $ (1 :| [3, 5, 3]) `union` (4 :| [5, 3, 5, 2]) == 1 :| [3, 5, 3, 4, 2]
testGen "first succ (1,\"test\") == (2,\"test\")" $ first succ (1,"test") == (2,"test")
testGen "second reverse (1,\"test\") == (1,\"tset\")" $ second reverse (1,"test") == (1,"tset")
testGen "(succ *** reverse) (1,\"test\") == (2,\"tset\")" $ (succ *** reverse) (1,"test") == (2,"tset")
testGen "(succ &&& pred) 1 == (2,0)" $ (succ &&& pred) 1 == (2,0)
testGen "dupe 12 == (12, 12)" $ dupe 12 == (12, 12)
testGen "both succ (1,2) == (2,3)" $ both succ (1,2) == (2,3)
- testGen "typeRep (Proxy :: Proxy Int) == typeOf (1 :: Int)" $ typeRep (Proxy :: Proxy Int) == typeOf (1 :: Int)
- testGen "showVersion (makeVersion [1,2,3]) == \"1.2.3\"" $ showVersion (makeVersion [1,2,3]) == "1.2.3"
testGen "\\x -> readVersion (showVersion x) == x" $ \x -> readVersion (showVersion x) == x
testGen "readVersion \"hello\" == undefined" $ erroneous $ readVersion "hello"
testGen "showDP 4 pi == \"3.1416\"" $ showDP 4 pi == "3.1416"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/extra-1.6.14/test/TestUtil.hs new/extra-1.6.15/test/TestUtil.hs
--- old/extra-1.6.14/test/TestUtil.hs 2018-10-02 16:08:01.000000000 +0200
+++ new/extra-1.6.15/test/TestUtil.hs 2019-04-22 20:25:59.000000000 +0200
@@ -1,4 +1,4 @@
-{-# LANGUAGE ScopedTypeVariables, CPP, FlexibleInstances #-}
+{-# LANGUAGE ScopedTypeVariables, FlexibleInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-} -- OK because a test module
module TestUtil
@@ -22,7 +22,8 @@
import Data.Either.Extra as X
import Data.Function as X
import Data.IORef.Extra as X
-import Data.List.Extra as X
+import Data.List.Extra as X hiding (union, unionBy)
+import Data.List.NonEmpty.Extra as X (NonEmpty(..), (|>), (|:), appendl, appendr, union, unionBy)
import Data.Monoid as X
import Data.Tuple.Extra as X
import Data.Typeable.Extra as X
@@ -65,11 +66,6 @@
| a == b = True
| otherwise = error $ "Not equal!\n" ++ show a ++ "\n" ++ show b
-#if __GLASGOW_HASKELL__ < 707
-instance Eq ErrorCall where
- ErrorCall x == ErrorCall y = x == y
-#endif
-
runTests :: IO () -> IO ()
runTests t = do
-- ensure that capturing output is robust
1
0
Hello community,
here is the log from the commit of package ghc-dbus for openSUSE:Factory checked in at 2019-04-28 20:12:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-dbus (Old)
and /work/SRC/openSUSE:Factory/.ghc-dbus.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-dbus"
Sun Apr 28 20:12:31 2019 rev:7 rq:698548 version:1.2.5
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-dbus/ghc-dbus.changes 2019-02-24 17:18:37.008416176 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-dbus.new.5536/ghc-dbus.changes 2019-04-28 20:12:44.306445139 +0200
@@ -1,0 +2,6 @@
+Sun Apr 14 02:02:26 UTC 2019 - psimons(a)suse.com
+
+- Update dbus to version 1.2.5.
+ Upstream does not provide a change log file.
+
+-------------------------------------------------------------------
Old:
----
dbus-1.2.4.tar.gz
New:
----
dbus-1.2.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-dbus.spec ++++++
--- /var/tmp/diff_new_pack.5iUlJf/_old 2019-04-28 20:12:45.058444671 +0200
+++ /var/tmp/diff_new_pack.5iUlJf/_new 2019-04-28 20:12:45.062444668 +0200
@@ -19,7 +19,7 @@
%global pkg_name dbus
%bcond_with tests
Name: ghc-%{pkg_name}
-Version: 1.2.4
+Version: 1.2.5
Release: 0
Summary: A client library for the D-Bus IPC system
License: Apache-2.0
++++++ dbus-1.2.4.tar.gz -> dbus-1.2.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dbus-1.2.4/dbus.cabal new/dbus-1.2.5/dbus.cabal
--- old/dbus-1.2.4/dbus.cabal 2019-02-15 04:26:05.000000000 +0100
+++ new/dbus-1.2.5/dbus.cabal 2019-04-13 05:25:23.000000000 +0200
@@ -1,6 +1,6 @@
cabal-version: >=1.8
name: dbus
-version: 1.2.4
+version: 1.2.5
license: Apache-2.0
license-file: license.txt
maintainer: Andrey Sverdlichenko <blaze(a)ruddy.ru>
@@ -150,7 +150,7 @@
network <2.9,
parsec <3.2,
process <1.7,
- QuickCheck <2.13,
+ QuickCheck <2.14,
random <1.2,
resourcet <1.3,
tasty <1.3,
1
0
Hello community,
here is the log from the commit of package ghc-connection for openSUSE:Factory checked in at 2019-04-28 20:12:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-connection (Old)
and /work/SRC/openSUSE:Factory/.ghc-connection.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-connection"
Sun Apr 28 20:12:20 2019 rev:11 rq:698547 version:0.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-connection/ghc-connection.changes 2018-10-25 08:23:42.275874483 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-connection.new.5536/ghc-connection.changes 2019-04-28 20:12:35.434450652 +0200
@@ -1,0 +2,7 @@
+Tue Apr 23 02:01:50 UTC 2019 - psimons(a)suse.com
+
+- Update connection to version 0.3.0.
+ Upstream has not updated the file "CHANGELOG.md" since the last
+ release.
+
+-------------------------------------------------------------------
Old:
----
connection-0.2.8.tar.gz
New:
----
connection-0.3.0.tar.gz
connection.cabal
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-connection.spec ++++++
--- /var/tmp/diff_new_pack.EQsK2K/_old 2019-04-28 20:12:35.922450349 +0200
+++ /var/tmp/diff_new_pack.EQsK2K/_new 2019-04-28 20:12:35.926450346 +0200
@@ -1,7 +1,7 @@
#
# spec file for package ghc-connection
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,15 +18,16 @@
%global pkg_name connection
Name: ghc-%{pkg_name}
-Version: 0.2.8
+Version: 0.3.0
Release: 0
Summary: Simple and easy network connections API
License: BSD-3-Clause
Group: Development/Libraries/Haskell
URL: https://hackage.haskell.org/package/%{pkg_name}
Source0: https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{ve…
+Source1: https://hackage.haskell.org/package/%{pkg_name}-%{version}/revision/1.cabal…
BuildRequires: ghc-Cabal-devel
-BuildRequires: ghc-byteable-devel
+BuildRequires: ghc-basement-devel
BuildRequires: ghc-bytestring-devel
BuildRequires: ghc-containers-devel
BuildRequires: ghc-data-default-class-devel
@@ -60,6 +61,7 @@
%prep
%setup -q -n %{pkg_name}-%{version}
+cp -p %{SOURCE1} %{pkg_name}.cabal
%build
%ghc_lib_build
++++++ connection-0.2.8.tar.gz -> connection-0.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/connection-0.2.8/LICENSE new/connection-0.3.0/LICENSE
--- old/connection-0.2.8/LICENSE 2014-10-23 14:32:22.000000000 +0200
+++ new/connection-0.3.0/LICENSE 2019-01-27 12:50:58.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright (c) 2012 Vincent Hanquez <vincent(a)snarc.org>
+Copyright (c) 2012-2019 Vincent Hanquez <vincent(a)snarc.org>
All rights reserved.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/connection-0.2.8/Network/Connection/Types.hs new/connection-0.3.0/Network/Connection/Types.hs
--- old/connection-0.2.8/Network/Connection/Types.hs 2016-05-04 20:28:17.000000000 +0200
+++ new/connection-0.3.0/Network/Connection/Types.hs 2019-04-22 09:12:58.000000000 +0200
@@ -16,7 +16,6 @@
import Data.X509.CertificateStore
import Data.ByteString (ByteString)
-import Network.BSD (HostName)
import Network.Socket (PortNumber, Socket)
import qualified Network.TLS as TLS
@@ -27,6 +26,10 @@
| ConnectionSocket Socket
| ConnectionTLS TLS.Context
+
+-- | Hostname This could either be a name string (punycode encoded) or an ipv4/ipv6
+type HostName = String
+
-- | Connection Parameters to establish a Connection.
--
-- The strict minimum is an hostname and the port.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/connection-0.2.8/Network/Connection.hs new/connection-0.3.0/Network/Connection.hs
--- old/connection-0.2.8/Network/Connection.hs 2017-03-20 23:42:12.000000000 +0100
+++ new/connection-0.3.0/Network/Connection.hs 2019-04-22 12:26:35.000000000 +0200
@@ -47,9 +47,9 @@
-- * TLS related operation
, connectionSetSecure
, connectionIsSecure
+ , connectionSessionManager
) where
-import Control.Applicative
import Control.Concurrent.MVar
import Control.Monad (join)
import qualified Control.Exception as E
@@ -60,11 +60,8 @@
import System.X509 (getSystemCertificateStore)
-import Network.Socks5
-import qualified Network as N
+import Network.Socks5 (defaultSocksConf, socksConnectWithSocket, SocksAddress(..), SocksHostAddress(..))
import Network.Socket
-import Network.BSD (getProtocolNumber)
-import qualified Network.Socket as N (close)
import qualified Network.Socket.ByteString as N
import Data.Default.Class
@@ -114,7 +111,7 @@
makeTLSParams :: ConnectionContext -> ConnectionID -> TLSSettings -> TLS.ClientParams
makeTLSParams cg cid ts@(TLSSettingsSimple {}) =
(TLS.defaultParamsClient (fst cid) portString)
- { TLS.clientSupported = def { TLS.supportedCiphers = TLS.ciphersuite_all }
+ { TLS.clientSupported = def { TLS.supportedCiphers = TLS.ciphersuite_default }
, TLS.clientShared = def
{ TLS.sharedCAStore = globalCertificateStore cg
, TLS.sharedValidationCache = validationCache
@@ -171,63 +168,77 @@
-> ConnectionParams -- ^ The parameters for this connection (where to connect, and such).
-> IO Connection -- ^ The new established connection on success.
connectTo cg cParams = do
- conFct <- getConFct (connectionUseSocks cParams)
- let doConnect = conFct (connectionHostname cParams) (N.PortNumber $ connectionPort cParams)
- E.bracketOnError doConnect N.close $ \h->
+ let conFct = doConnect (connectionUseSocks cParams)
+ (connectionHostname cParams)
+ (connectionPort cParams)
+ E.bracketOnError conFct (close . fst) $ \(h, _) ->
connectFromSocket cg h cParams
where
- getConFct Nothing = return resolve'
- getConFct (Just (OtherProxy h p)) = return $ \_ _ -> resolve' h (N.PortNumber p)
- getConFct (Just (SockSettingsSimple h p)) = return $ socksConnectTo' h (N.PortNumber p)
- getConFct (Just (SockSettingsEnvironment v)) = do
- -- if we can't get the environment variable or that the variable cannot be parsed
- -- we connect directly.
- let name = maybe "SOCKS_SERVER" id v
- evar <- E.try (getEnv name)
- case evar of
- Left (_ :: E.IOException) -> return resolve'
- Right var ->
- case parseSocks var of
- Nothing -> return resolve'
- Just (sHost, sPort) -> return $ socksConnectTo' sHost (N.PortNumber $ fromIntegral (sPort :: Int))
-
- -- Try to parse "host:port" or "host"
- parseSocks s =
- case break (== ':') s of
- (sHost, "") -> Just (sHost, 1080)
- (sHost, ':':portS) ->
- case reads portS of
- [(sPort,"")] -> Just (sHost, sPort)
- _ -> Nothing
- _ -> Nothing
-
- resolve' host portid = do
- let serv = case portid of
- N.Service serv -> serv
- N.PortNumber n -> show n
- _ -> error "cannot resolve service"
- proto <- getProtocolNumber "tcp"
- let hints = defaultHints { addrFlags = [AI_ADDRCONFIG]
- , addrProtocol = proto
- , addrSocketType = Stream }
- addrs <- getAddrInfo (Just hints) (Just host) (Just serv)
- firstSuccessful $ map tryToConnect addrs
+ sockConnect sockHost sockPort h p = do
+ (sockServ, servAddr) <- resolve' sockHost sockPort
+ let sockConf = defaultSocksConf servAddr
+ let destAddr = SocksAddress (SocksAddrDomainName $ BC.pack h) p
+ (dest, _) <- socksConnectWithSocket sockServ sockConf destAddr
+ case dest of
+ SocksAddrIPV4 h4 -> return (sockServ, SockAddrInet p h4)
+ SocksAddrIPV6 h6 -> return (sockServ, SockAddrInet6 p 0 h6 0)
+ SocksAddrDomainName _ -> error "internal error: socks connect return a resolved address as domain name"
+
+
+ doConnect proxy h p =
+ case proxy of
+ Nothing -> resolve' h p
+ Just (OtherProxy proxyHost proxyPort) -> resolve' proxyHost proxyPort
+ Just (SockSettingsSimple sockHost sockPort) ->
+ sockConnect sockHost sockPort h p
+ Just (SockSettingsEnvironment envName) -> do
+ -- if we can't get the environment variable or that the string cannot be parsed
+ -- we connect directly.
+ let name = maybe "SOCKS_SERVER" id envName
+ evar <- E.try (getEnv name)
+ case evar of
+ Left (_ :: E.IOException) -> resolve' h p
+ Right var ->
+ case parseSocks var of
+ Nothing -> resolve' h p
+ Just (sockHost, sockPort) -> sockConnect sockHost sockPort h p
+
+ -- Try to parse "host:port" or "host"
+ -- if port is ommited then the default SOCKS port (1080) is assumed
+ parseSocks :: String -> Maybe (String, PortNumber)
+ parseSocks s =
+ case break (== ':') s of
+ (sHost, "") -> Just (sHost, 1080)
+ (sHost, ':':portS) ->
+ case reads portS of
+ [(sPort,"")] -> Just (sHost, sPort)
+ _ -> Nothing
+ _ -> Nothing
+
+ -- Try to resolve the host/port into an address (zero to many of them), then
+ -- try to connect from the first address to the last, returning the first one that
+ -- succeed
+ resolve' :: String -> PortNumber -> IO (Socket, SockAddr)
+ resolve' host port = do
+ let hints = defaultHints { addrFlags = [AI_ADDRCONFIG], addrSocketType = Stream }
+ addrs <- getAddrInfo (Just hints) (Just host) (Just $ show port)
+ firstSuccessful $ map tryToConnect addrs
+ where
+ tryToConnect addr =
+ E.bracketOnError
+ (socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr))
+ (close)
+ (\sock -> connect sock (addrAddress addr) >> return (sock, addrAddress addr))
+ firstSuccessful = go []
where
- tryToConnect addr =
- E.bracketOnError
- (socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr))
- (N.close)
- (\sock -> connect sock (addrAddress addr) >> return sock)
- firstSuccessful = go []
- where
- go :: [E.IOException] -> [IO a] -> IO a
- go [] [] = E.throwIO $ HostNotResolved host
- go l@(_:_) [] = E.throwIO $ HostCannotConnect host l
- go acc (act:followingActs) = do
- er <- E.try act
- case er of
- Left err -> go (err:acc) followingActs
- Right r -> return r
+ go :: [E.IOException] -> [IO a] -> IO a
+ go [] [] = E.throwIO $ HostNotResolved host
+ go l@(_:_) [] = E.throwIO $ HostCannotConnect host l
+ go acc (act:followingActs) = do
+ er <- E.try act
+ case er of
+ Left err -> go (err:acc) followingActs
+ Right r -> return r
-- | Put a block of data in the connection.
connectionPut :: Connection -> ByteString -> IO ()
@@ -369,7 +380,7 @@
connectionClose :: Connection -> IO ()
connectionClose = withBackend backendClose
where backendClose (ConnectionTLS ctx) = ignoreIOExc (TLS.bye ctx) `E.finally` TLS.contextClose ctx
- backendClose (ConnectionSocket sock) = N.close sock
+ backendClose (ConnectionSocket sock) = close sock
backendClose (ConnectionStream h) = hClose h
ignoreIOExc action = action `E.catch` \(_ :: E.IOException) -> return ()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/connection-0.2.8/connection.cabal new/connection-0.3.0/connection.cabal
--- old/connection-0.2.8/connection.cabal 2017-03-20 23:42:35.000000000 +0100
+++ new/connection-0.3.0/connection.cabal 2019-04-22 12:11:03.000000000 +0200
@@ -1,5 +1,5 @@
Name: connection
-Version: 0.2.8
+Version: 0.3.0
Description:
Simple network library for all your connection need.
.
@@ -17,19 +17,19 @@
Category: Network
stability: experimental
Cabal-Version: >=1.6
-Homepage: http://github.com/vincenthz/hs-connection
+Homepage: https://github.com/vincenthz/hs-connection
extra-source-files: README.md
CHANGELOG.md
Library
Build-Depends: base >= 3 && < 5
+ , basement
, bytestring
- , byteable
, containers
, data-default-class
- , network >= 2.3
- , tls >= 1.3
- , socks >= 0.5.5
+ , network >= 2.6
+ , tls >= 1.4
+ , socks >= 0.6
, x509 >= 1.5
, x509-store >= 1.5
, x509-system >= 1.5
++++++ connection.cabal ++++++
Name: connection
Version: 0.3.0
x-revision: 1
Description:
Simple network library for all your connection need.
.
Features: Really simple to use, SSL/TLS, SOCKS.
.
This library provides a very simple api to create sockets
to a destination with the choice of SSL/TLS, and SOCKS.
License: BSD3
License-file: LICENSE
Copyright: Vincent Hanquez <vincent(a)snarc.org>
Author: Vincent Hanquez <vincent(a)snarc.org>
Maintainer: Vincent Hanquez <vincent(a)snarc.org>
Synopsis: Simple and easy network connections API
Build-Type: Simple
Category: Network
stability: experimental
Cabal-Version: >=1.6
Homepage: https://github.com/vincenthz/hs-connection
extra-source-files: README.md
CHANGELOG.md
Library
Build-Depends: base >= 4.8 && < 5
, basement
, bytestring
, containers
, data-default-class
, network >= 2.6
, tls >= 1.4
, socks >= 0.6
, x509 >= 1.5
, x509-store >= 1.5
, x509-system >= 1.5
, x509-validation >= 1.5
Exposed-modules: Network.Connection
Other-modules: Network.Connection.Types
ghc-options: -Wall
source-repository head
type: git
location: https://github.com/vincenthz/hs-connection
1
0
Hello community,
here is the log from the commit of package ghc-cmark-gfm for openSUSE:Factory checked in at 2019-04-28 20:12:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-cmark-gfm (Old)
and /work/SRC/openSUSE:Factory/.ghc-cmark-gfm.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-cmark-gfm"
Sun Apr 28 20:12:15 2019 rev:6 rq:698546 version:0.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-cmark-gfm/ghc-cmark-gfm.changes 2019-03-19 09:59:34.308074113 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-cmark-gfm.new.5536/ghc-cmark-gfm.changes 2019-04-28 20:12:34.542451206 +0200
@@ -1,0 +2,14 @@
+Thu Apr 11 06:35:14 UTC 2019 - psimons(a)suse.com
+
+- Update cmark-gfm to version 0.2.0.
+ cmark-gfm 0.2.0 (8 Apr 2019)
+
+ * Pull in upstream changes.
+
+ cmark 0.6 (08 Apr 2019)
+
+ * Update to cmark 0.29.0.
+ * Export optUnsafe. Note that the default is now to suppress
+ potentially unsafe HTML; set optUnsafe to return to the old behavior.
+
+-------------------------------------------------------------------
Old:
----
cmark-gfm-0.1.8.tar.gz
New:
----
cmark-gfm-0.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-cmark-gfm.spec ++++++
--- /var/tmp/diff_new_pack.leUBTB/_old 2019-04-28 20:12:35.002450921 +0200
+++ /var/tmp/diff_new_pack.leUBTB/_new 2019-04-28 20:12:35.006450918 +0200
@@ -19,7 +19,7 @@
%global pkg_name cmark-gfm
%bcond_with tests
Name: ghc-%{pkg_name}
-Version: 0.1.8
+Version: 0.2.0
Release: 0
Summary: Fast, accurate GitHub Flavored Markdown parser and renderer
License: BSD-3-Clause
@@ -38,7 +38,7 @@
This package provides Haskell bindings for <https://github.com/github/cmark-gfm
libcmark-gfm>, the reference parser for <https://github.github.com/gfm/ GitHub
Flavored Markdown>, a fully specified variant of Markdown. It includes sources
-for libcmark-gfm (0.28.3.gfm.20) and does not require prior installation of the
+for libcmark-gfm (0.29.0.gfm.0) and does not require prior installation of the
C library.
%package devel
++++++ cmark-gfm-0.1.8.tar.gz -> cmark-gfm-0.2.0.tar.gz ++++++
++++ 3087 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package gnustep-libobjc2 for openSUSE:Factory checked in at 2019-04-28 20:12:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnustep-libobjc2 (Old)
and /work/SRC/openSUSE:Factory/.gnustep-libobjc2.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnustep-libobjc2"
Sun Apr 28 20:12:07 2019 rev:3 rq:698541 version:2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnustep-libobjc2/gnustep-libobjc2.changes 2019-03-26 22:35:15.389658801 +0100
+++ /work/SRC/openSUSE:Factory/.gnustep-libobjc2.new.5536/gnustep-libobjc2.changes 2019-04-28 20:12:30.858453496 +0200
@@ -1,0 +2,30 @@
+Fri Apr 26 09:27:45 UTC 2019 - Luigi Baldoni <aloisio(a)gmx.com>
+
+- Update to version 2.0
+ * This release introduces a new Objective-C ABI, which is
+ designed to be forward compatible with future changes and
+ removes a large number of hacks that were required for
+ compatibility with the prior ABI that included features
+ introduced in the 1980s. Highlights include:
+ + The linker now removes duplicate selectors within a
+ library.
+ + The linker will remove duplicate protocol definitions
+ within a library.
+ + Protocols and classes are now always accessed via an
+ indirection layer, so they can be extended by future
+ versions of the ABI without breaking compatibility.
+ + Categories can include property metadata and both
+ categories.
+ + Constant strings are now emitted with a richer structure,
+ which provides faster hashing and better unicode support.
+ + Instance variable metadata includes size and alignment,
+ allowing better object layout and more accurate
+ introspection. Instance variable metadata now includes
+ more accurate information about ARC ownership semantics.
+ + Method metadata now includes extended type information,
+ allowing bridged languages to understand the class that
+ methods expect and not just the fact that they take an
+ object. This was previously an obstacle to supporting
+ JavaScriptCore's Objective-C bridge with GNUstep.
+
+-------------------------------------------------------------------
Old:
----
libobjc2-1.9.tar.gz
New:
----
libobjc2-2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnustep-libobjc2.spec ++++++
--- /var/tmp/diff_new_pack.trXsRo/_old 2019-04-28 20:12:31.822452896 +0200
+++ /var/tmp/diff_new_pack.trXsRo/_new 2019-04-28 20:12:31.826452894 +0200
@@ -19,7 +19,7 @@
%define _oname libobjc2
%define libname libobjc4_6
Name: gnustep-libobjc2
-Version: 1.9
+Version: 2.0
Release: 0
Summary: GNUstep Objective-C Runtime
License: MIT
++++++ libobjc2-1.9.tar.gz -> libobjc2-2.0.tar.gz ++++++
++++ 11685 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package libdnf for openSUSE:Factory checked in at 2019-04-28 20:12:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libdnf (Old)
and /work/SRC/openSUSE:Factory/.libdnf.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libdnf"
Sun Apr 28 20:12:02 2019 rev:9 rq:698443 version:0.31.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/libdnf/libdnf.changes 2019-04-01 12:39:54.793959710 +0200
+++ /work/SRC/openSUSE:Factory/.libdnf.new.5536/libdnf.changes 2019-04-28 20:12:17.986461496 +0200
@@ -1,0 +2,16 @@
+Fri Apr 26 18:53:23 UTC 2019 - Neal Gompa <ngompa13(a)gmail.com>
+
+- Add patch for SLE to temporarily drop support for Module advisories
+ * Patch: libdnf-0.31.0-Revert-support-for-Module-advisories.patch
+
+-------------------------------------------------------------------
+Fri Apr 26 10:58:12 UTC 2019 - Neal Gompa <ngompa13(a)gmail.com>
+
+- Update to version 0.31.0
+ + Installroot now requires absolute path
+ + Support "_none_" value for repo option "proxy" (rh#1680272)
+ + Add support for Module advisories
+ + Add support for xml:base attribute from primary.xml (rh#1691315)
+ + Fix detection of Platform ID for modules (rh#1688462)
+
+-------------------------------------------------------------------
Old:
----
libdnf-0.28.1.tar.gz
New:
----
libdnf-0.31.0-Revert-support-for-Module-advisories.patch
libdnf-0.31.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libdnf.spec ++++++
--- /var/tmp/diff_new_pack.I7Z0rH/_old 2019-04-28 20:12:20.114460172 +0200
+++ /var/tmp/diff_new_pack.I7Z0rH/_new 2019-04-28 20:12:20.162460143 +0200
@@ -16,8 +16,12 @@
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
+%if (0%{?sle_version} && 0%{?sle_version} < 150200)
+ %global libsolv_version 0.7.3
+%else
+ %global libsolv_version 0.7.4
+%endif
-%global libsolv_version 0.6.34
%global libmodulemd_version 1.6.1
%global librepo_version 1.9.6
%global swig_version 3.0.12
@@ -33,7 +37,7 @@
%define devname %{name}-devel
Name: libdnf
-Version: 0.28.1
+Version: 0.31.0
Release: 0
Summary: Library providing C and Python APIs atop libsolv
License: LGPL-2.1-or-later
@@ -46,6 +50,10 @@
# PATCH-FIX-OPENSUSE: Switch default reposdir to /etc/dnf/repos.d
Patch1001: libdnf-0.28.1-Switch-default-reposdir-to-etc-dnf-repos.d.patch
+# PATCH-FIX-SLE: Revert support for module advisories, since that requires libsolv 0.7.4
+## Drop when bsc#1133527 is fixed
+Patch2001: libdnf-0.31.0-Revert-support-for-Module-advisories.patch
+
BuildRequires: cmake
BuildRequires: gcc
BuildRequires: gcc-c++
@@ -145,6 +153,11 @@
%prep
%autosetup -p1
+%if (0%{?sle_version} && 0%{?sle_version} > 150100) || 0%{?suse_version} > 1500
+# Revert this patch for SLE 15 >SP1 and SUSE Linux >15
+%patch2001 -R -p1
+%endif
+
# Fix sphinx-build run...
sed -e "s/sphinx-build-3/sphinx-build-%{python3_version}/" -i docs/hawkey/CMakeLists.txt
++++++ libdnf-0.31.0-Revert-support-for-Module-advisories.patch ++++++
>From 4e296a4d56595a10e4532b0e9bbe5a0d6eb75d01 Mon Sep 17 00:00:00 2001
From: Neal Gompa <ngompa13(a)gmail.com>
Date: Fri, 26 Apr 2019 07:41:04 -0400
Subject: [PATCH] Revert support for Module advisories
SUSE Linux Enterprise 15 SP1 (and thus openSUSE Leap 15.1) do not
have libsolv 0.7.4, so handling advisories for modules is not supported.
This reverts the following commits (in order):
* 33a73d7b54cabd20347aac9d59bf9cb1e308f975
* defb481a340cc3e50fde69e114373e66ada74835
---
libdnf.spec | 4 +-
libdnf/hy-package.cpp | 7 +-
libdnf/sack/CMakeLists.txt | 1 -
libdnf/sack/advisory.cpp | 21 ------
libdnf/sack/advisory.hpp | 2 -
libdnf/sack/advisorymodule.cpp | 113 ---------------------------------
libdnf/sack/advisorymodule.hpp | 58 -----------------
libdnf/sack/query.cpp | 16 ++---
libdnf/utils/utils.cpp | 28 --------
libdnf/utils/utils.hpp | 4 --
10 files changed, 8 insertions(+), 246 deletions(-)
delete mode 100644 libdnf/sack/advisorymodule.cpp
delete mode 100644 libdnf/sack/advisorymodule.hpp
diff --git a/libdnf.spec b/libdnf.spec
index aa09f497..e14d7dd6 100644
--- a/libdnf.spec
+++ b/libdnf.spec
@@ -1,7 +1,7 @@
-%global libsolv_version 0.7.4-1
+%global libsolv_version 0.6.35-1
%global libmodulemd_version 1.6.1
%global librepo_version 1.9.5
-%global dnf_conflict 4.2.5
+%global dnf_conflict 4.2.3
%global swig_version 3.0.12
%bcond_with valgrind
diff --git a/libdnf/hy-package.cpp b/libdnf/hy-package.cpp
index 564bc464..833e082c 100644
--- a/libdnf/hy-package.cpp
+++ b/libdnf/hy-package.cpp
@@ -29,7 +29,6 @@
* See also: #DnfContext
*/
-#include "libdnf/utils/utils.hpp"
#include <algorithm>
#include <ctime>
@@ -1016,11 +1015,7 @@ dnf_package_get_advisories(DnfPackage *pkg, int cmp_type)
(cmp < 0 && (cmp_type & HY_LT)) ||
(cmp == 0 && (cmp_type & HY_EQ))) {
advisory = dnf_advisory_new(sack, di.solvid);
- if (libdnf::isAdvisoryApplicable(*advisory, sack)) {
- g_ptr_array_add(advisorylist, advisory);
- } else {
- dnf_advisory_free(advisory);
- }
+ g_ptr_array_add(advisorylist, advisory);
dataiterator_skip_solvable(&di);
}
}
diff --git a/libdnf/sack/CMakeLists.txt b/libdnf/sack/CMakeLists.txt
index 40d3373c..5e8d5e25 100644
--- a/libdnf/sack/CMakeLists.txt
+++ b/libdnf/sack/CMakeLists.txt
@@ -1,7 +1,6 @@
set(SACK_SOURCES
${SACK_SOURCES}
${CMAKE_CURRENT_SOURCE_DIR}/advisory.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/advisorymodule.cpp
${CMAKE_CURRENT_SOURCE_DIR}/advisorypkg.cpp
${CMAKE_CURRENT_SOURCE_DIR}/advisoryref.cpp
${CMAKE_CURRENT_SOURCE_DIR}/packageset.cpp
diff --git a/libdnf/sack/advisory.cpp b/libdnf/sack/advisory.cpp
index bb9e7f40..d006bcc5 100644
--- a/libdnf/sack/advisory.cpp
+++ b/libdnf/sack/advisory.cpp
@@ -24,7 +24,6 @@
#include "advisory.hpp"
#include "advisorypkg.hpp"
-#include "advisorymodule.hpp"
#include "advisoryref.hpp"
#include "../dnf-advisory-private.hpp"
#include "../dnf-advisoryref.h"
@@ -134,26 +133,6 @@ Advisory::getPackages(std::vector<AdvisoryPkg> & pkglist, bool withFilemanes) co
dataiterator_free(&di);
}
-std::vector<AdvisoryModule> Advisory::getModules() const
-{
- std::vector<AdvisoryModule> moduleList;
- Dataiterator di;
- Pool *pool = dnf_sack_get_pool(sack);
-
- dataiterator_init(&di, pool, 0, advisory, UPDATE_MODULE, 0, 0);
- while (dataiterator_step(&di)) {
- dataiterator_setpos(&di);
- Id name = pool_lookup_id(pool, SOLVID_POS, UPDATE_MODULE_NAME);
- Id stream = pool_lookup_id(pool, SOLVID_POS, UPDATE_MODULE_STREAM);
- Id version = pool_lookup_id(pool, SOLVID_POS, UPDATE_MODULE_VERSION);
- Id context = pool_lookup_id(pool, SOLVID_POS, UPDATE_MODULE_CONTEXT);
- Id arch = pool_lookup_id(pool, SOLVID_POS, UPDATE_MODULE_ARCH);
- moduleList.emplace_back(sack, advisory, name, stream, version, context, arch);
- }
- dataiterator_free(&di);
- return moduleList;
-}
-
void
Advisory::getReferences(std::vector<AdvisoryRef> & reflist) const
{
diff --git a/libdnf/sack/advisory.hpp b/libdnf/sack/advisory.hpp
index 5aa8dc60..37712573 100644
--- a/libdnf/sack/advisory.hpp
+++ b/libdnf/sack/advisory.hpp
@@ -33,7 +33,6 @@
namespace libdnf {
struct AdvisoryPkg;
-struct AdvisoryModule;
struct Advisory {
public:
@@ -43,7 +42,6 @@ public:
DnfAdvisoryKind getKind() const;
const char *getName() const;
void getPackages(std::vector<AdvisoryPkg> & pkglist, bool withFilemanes = true) const;
- std::vector<AdvisoryModule> getModules() const;
void getReferences(std::vector<AdvisoryRef> & reflist) const;
const char *getRights() const;
const char *getSeverity() const;
diff --git a/libdnf/sack/advisorymodule.cpp b/libdnf/sack/advisorymodule.cpp
deleted file mode 100644
index a209b5f1..00000000
--- a/libdnf/sack/advisorymodule.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2019 Red Hat, Inc.
- *
- * Licensed under the GNU Lesser General Public License Version 2.1
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <string>
-
-#include <solv/poolid.h>
-
-#include "advisory.hpp"
-#include "advisorymodule.hpp"
-#include "../dnf-sack-private.hpp"
-
-namespace libdnf {
-
-class AdvisoryModule::Impl {
-private:
- friend AdvisoryModule;
- DnfSack *sack;
- Id advisory;
- Id name;
- Id stream;
- Id version;
- Id context;
- Id arch;
-};
-
-AdvisoryModule::AdvisoryModule(DnfSack *sack, Id advisory, Id name, Id stream, Id version, Id context, Id arch) : pImpl(new Impl)
-{
- pImpl->sack = sack;
- pImpl->advisory = advisory;
- pImpl->name = name;
- pImpl->stream = stream;
- pImpl->version = version;
- pImpl->context = context;
- pImpl->arch = arch;
-}
-AdvisoryModule::AdvisoryModule(const AdvisoryModule & src) : pImpl(new Impl) { *pImpl = *src.pImpl; }
-AdvisoryModule::AdvisoryModule(AdvisoryModule && src) : pImpl(new Impl) { pImpl.swap(src.pImpl); }
-AdvisoryModule::~AdvisoryModule() = default;
-
-AdvisoryModule & AdvisoryModule::operator=(const AdvisoryModule & src) { *pImpl = *src.pImpl; return *this; }
-
-AdvisoryModule &
-AdvisoryModule::operator=(AdvisoryModule && src) noexcept
-{
- pImpl.swap(src.pImpl);
- return *this;
-}
-
-bool
-AdvisoryModule::nsvcaEQ(AdvisoryModule & other)
-{
- return other.pImpl->name == pImpl->name &&
- other.pImpl->stream == pImpl->stream &&
- other.pImpl->version == pImpl->version &&
- other.pImpl->context == pImpl->context &&
- other.pImpl->arch == pImpl->arch;
-}
-
-Advisory * AdvisoryModule::getAdvisory() const
-{
- return new Advisory(pImpl->sack, pImpl->advisory);
-}
-
-const char *
-AdvisoryModule::getName() const
-{
- return pool_id2str(dnf_sack_get_pool(pImpl->sack), pImpl->name);
-}
-
-const char *
-AdvisoryModule::getStream() const
-{
- return pool_id2str(dnf_sack_get_pool(pImpl->sack), pImpl->stream);
-}
-
-const char *
-AdvisoryModule::getVersion() const
-{
- return pool_id2str(dnf_sack_get_pool(pImpl->sack), pImpl->version);
-}
-
-const char *
-AdvisoryModule::getContext() const
-{
- return pool_id2str(dnf_sack_get_pool(pImpl->sack), pImpl->context);
-}
-
-const char *
-AdvisoryModule::getArch() const
-{
- return pool_id2str(dnf_sack_get_pool(pImpl->sack), pImpl->arch);
-}
-
-DnfSack * AdvisoryModule::getSack() { return pImpl->sack; }
-
-}
diff --git a/libdnf/sack/advisorymodule.hpp b/libdnf/sack/advisorymodule.hpp
deleted file mode 100644
index a36bee03..00000000
--- a/libdnf/sack/advisorymodule.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2019 Red Hat, Inc.
- *
- * Licensed under the GNU Lesser General Public License Version 2.1
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#ifndef __ADVISORY_MODULE_HPP
-#define __ADVISORY_MODULE_HPP
-
-#include "../dnf-types.h"
-#include "advisory.hpp"
-
-#include <memory>
-
-#include <solv/pooltypes.h>
-
-
-namespace libdnf {
-
-struct AdvisoryModule {
-public:
- AdvisoryModule(DnfSack *sack, Id advisory, Id name, Id stream, Id version, Id context, Id arch);
- AdvisoryModule(const AdvisoryModule & src);
- AdvisoryModule(AdvisoryModule && src);
- ~AdvisoryModule();
- AdvisoryModule & operator=(const AdvisoryModule & src);
- AdvisoryModule & operator=(AdvisoryModule && src) noexcept;
- bool nsvcaEQ(AdvisoryModule & other);
- Advisory * getAdvisory() const;
- const char * getName() const;
- const char * getStream() const;
- const char * getVersion() const;
- const char * getContext() const;
- const char * getArch() const;
- DnfSack * getSack();
-private:
- class Impl;
- std::unique_ptr<Impl> pImpl;
-};
-
-}
-
-#endif /* __ADVISORY_MODULE_HPP */
diff --git a/libdnf/sack/query.cpp b/libdnf/sack/query.cpp
index 99406480..256b114f 100644
--- a/libdnf/sack/query.cpp
+++ b/libdnf/sack/query.cpp
@@ -18,8 +18,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "libdnf/utils/utils.hpp"
-
#include <algorithm>
#include <assert.h>
#include <fnmatch.h>
@@ -1532,9 +1530,7 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
eq = false;
}
if (eq) {
- if (isAdvisoryApplicable(advisory, sack)) {
- advisory.getPackages(pkgs, false);
- }
+ advisory.getPackages(pkgs, false);
break;
}
}
@@ -2079,8 +2075,7 @@ void
Query::getAdvisoryPkgs(int cmpType, std::vector<AdvisoryPkg> & advisoryPkgs)
{
apply();
- auto sack = pImpl->sack;
- Pool *pool = dnf_sack_get_pool(sack);
+ Pool *pool = dnf_sack_get_pool(pImpl->sack);
std::vector<AdvisoryPkg> pkgs;
Dataiterator di;
auto resultPset = pImpl->result.get();
@@ -2089,10 +2084,9 @@ Query::getAdvisoryPkgs(int cmpType, std::vector<AdvisoryPkg> & advisoryPkgs)
dataiterator_init(&di, pool, 0, 0, 0, 0, 0);
dataiterator_prepend_keyname(&di, UPDATE_COLLECTION);
while (dataiterator_step(&di)) {
- Advisory advisory(sack, di.solvid);
- if (isAdvisoryApplicable(advisory, sack)) {
- advisory.getPackages(pkgs);
- }
+ Advisory advisory(pImpl->sack, di.solvid);
+
+ advisory.getPackages(pkgs);
dataiterator_skip_solvable(&di);
}
dataiterator_free(&di);
diff --git a/libdnf/utils/utils.cpp b/libdnf/utils/utils.cpp
index 458929e3..a12daa41 100644
--- a/libdnf/utils/utils.cpp
+++ b/libdnf/utils/utils.cpp
@@ -1,6 +1,4 @@
#include "utils.hpp"
-#include "libdnf/dnf-sack-private.hpp"
-#include "libdnf/sack/advisorymodule.hpp"
#include <tinyformat/tinyformat.hpp>
@@ -21,32 +19,6 @@ extern "C" {
namespace libdnf {
-bool isAdvisoryApplicable(libdnf::Advisory & advisory, DnfSack * sack)
-{
- auto moduleContainer = dnf_sack_get_module_container(sack);
- if (!moduleContainer) {
- return true;
- }
- auto moduleAdvisories = advisory.getModules();
- if (moduleAdvisories.empty()) {
- return true;
- }
- for (auto & moduleAdvisory: moduleAdvisories) {
- if (const char * name = moduleAdvisory.getName()) {
- if (const char * stream = moduleAdvisory.getStream()) {
- try {
- if (moduleContainer->isEnabled(name, stream)) {
- return true;
- }
- } catch (std::out_of_range &) {
- continue;
- }
- }
- }
- }
- return false;
-}
-
namespace string {
std::vector<std::string> split(const std::string &source, const char *delimiter, int maxSplit)
diff --git a/libdnf/utils/utils.hpp b/libdnf/utils/utils.hpp
index a653047f..326e4a97 100644
--- a/libdnf/utils/utils.hpp
+++ b/libdnf/utils/utils.hpp
@@ -7,8 +7,6 @@
#define DIGITS "0123456789"
#define REPOID_CHARS ASCII_LETTERS DIGITS "-_.:"
-#include "libdnf/sack/advisory.hpp"
-
#include <functional>
#include <string>
#include <vector>
@@ -36,8 +34,6 @@ private:
std::function<void()> func;
};
-bool isAdvisoryApplicable(Advisory & advisory, DnfSack * sack);
-
namespace string {
inline std::string fromCstring(const char * cstring) { return cstring ? cstring : ""; }
std::vector<std::string> split(const std::string &source, const char *delimiter, int maxSplit = -1);
--
2.20.1
++++++ libdnf-0.28.1.tar.gz -> libdnf-0.31.0.tar.gz ++++++
++++ 3562 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package dnf-plugins-core for openSUSE:Factory checked in at 2019-04-28 20:11:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dnf-plugins-core (Old)
and /work/SRC/openSUSE:Factory/.dnf-plugins-core.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dnf-plugins-core"
Sun Apr 28 20:11:40 2019 rev:7 rq:698420 version:4.0.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/dnf-plugins-core/dnf-plugins-core.changes 2019-04-01 12:39:59.289961893 +0200
+++ /work/SRC/openSUSE:Factory/.dnf-plugins-core.new.5536/dnf-plugins-core.changes 2019-04-28 20:12:06.114468873 +0200
@@ -1,0 +2,8 @@
+Fri Apr 26 12:42:24 UTC 2019 - Neal Gompa <ngompa13(a)gmail.com>
+
+- Backport fix for copr disable command traceback (rh#1693551)
+ * Patch: 0001-Fix-copr-disable-command-traceback-RhBug-1693551.patch
+- Backport doc fix to state repoid as repo identifier for config-manager (rh#1686779)
+ * Patch: 0002-doc-state-repoid-as-repo-identifier-of-config-manage.patch
+
+-------------------------------------------------------------------
New:
----
0001-Fix-copr-disable-command-traceback-RhBug-1693551.patch
0002-doc-state-repoid-as-repo-identifier-of-config-manage.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ dnf-plugins-core.spec ++++++
--- /var/tmp/diff_new_pack.YKPwYN/_old 2019-04-28 20:12:06.874468401 +0200
+++ /var/tmp/diff_new_pack.YKPwYN/_new 2019-04-28 20:12:06.894468388 +0200
@@ -43,6 +43,10 @@
Url: https://github.com/rpm-software-management/dnf-plugins-core
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
+# Backports from upstream
+Patch0001: 0001-Fix-copr-disable-command-traceback-RhBug-1693551.patch
+Patch0002: 0002-doc-state-repoid-as-repo-identifier-of-config-manage.patch
+
BuildArch: noarch
BuildRequires: cmake
++++++ 0001-Fix-copr-disable-command-traceback-RhBug-1693551.patch ++++++
>From 3bbae8fb4f73dede47741331eb2bdd3a4bf47176 Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel(a)redhat.com>
Date: Thu, 28 Mar 2019 15:29:00 +0100
Subject: [PATCH 1/2] Fix: copr disable command traceback (RhBug:1693551)
The "modify" argument of write_raw_configfile method must be
a dictionary with strings.
Closes: #329
Approved by: m-blaha
---
plugins/copr.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/copr.py b/plugins/copr.py
index 10cf5f9..8a43593 100644
--- a/plugins/copr.py
+++ b/plugins/copr.py
@@ -518,7 +518,7 @@ Do you really want to enable {0}?""".format('/'.join([self.copr_hostname,
.format(copr_username, copr_projectname)))
self.base.conf.write_raw_configfile(repo.repofile, repo.id,
- self.base.conf.substitutions, {"enabled": 0})
+ self.base.conf.substitutions, {"enabled": "0"})
@classmethod
def _get_data(cls, f):
--
2.20.1
++++++ 0002-doc-state-repoid-as-repo-identifier-of-config-manage.patch ++++++
>From f6dcc8bab12cd85bb5b99c12ddb3c168c38462af Mon Sep 17 00:00:00 2001
From: Jaroslav Mracek <jmracek(a)redhat.com>
Date: Thu, 28 Mar 2019 18:45:21 +0100
Subject: [PATCH 2/2] [doc] state repoid as repo identifier of config-manager
(RhBug:1686779)
It explicitly states that config-manager accept a repoid. Using the
repoid is the best way because it is unique identificator of
the repository.
https://bugzilla.redhat.com/show_bug.cgi?id=1686779
---
doc/config_manager.rst | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/doc/config_manager.rst b/doc/config_manager.rst
index 360bb8f..2feafcb 100644
--- a/doc/config_manager.rst
+++ b/doc/config_manager.rst
@@ -26,15 +26,15 @@ repositories are enabled or disabled, and add new repositories.
Synopsis
--------
-``dnf config-manager [options] <repo>...``
+``dnf config-manager [options] <repoid>...``
---------
Arguments
---------
-``<repo>``
- Display / modify specified repository. If not specified display / modify main DNF configuration.
- Repositories can be specified using globs.
+``<repoid>``
+ Display / modify a repository identified by <repoid>. If not specified, display / modify
+ main DNF configuration. Repositories can be specified using globs.
-------
Options
@@ -71,11 +71,12 @@ Examples
``dnf config-manager --dump``
Display main DNF configuration.
-``dnf config-manager repo --dump``
- Display configuration of repo.
+``dnf config-manager <repoid> --dump``
+ Display configuration of a repository identified by <repoid>.
-``dnf config-manager --set-enabled repo``
- Enable repo and make the change permanent.
+``dnf config-manager --set-enabled <repoid>``
+ Enable repository identified by <repoid> and make the change permanent.
-``dnf config-manager --setopt proxy=http://proxy.example.com:3128/ repo1 repo2 --save``
- Update proxy setting in repo1 and repo2 and make the change permanent.
+``dnf config-manager --setopt proxy=http://proxy.example.com:3128/ <repo1> <repo2> --save``
+ Update proxy setting in repositories with repoid <repo1> and <repo2> and make the change
+ permanent.
--
2.20.1
1
0
Hello community,
here is the log from the commit of package dnf for openSUSE:Factory checked in at 2019-04-28 20:11:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dnf (Old)
and /work/SRC/openSUSE:Factory/.dnf.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dnf"
Sun Apr 28 20:11:34 2019 rev:13 rq:698279 version:4.2.5
Changes:
--------
--- /work/SRC/openSUSE:Factory/dnf/dnf.changes 2019-04-21 09:04:53.322657070 +0200
+++ /work/SRC/openSUSE:Factory/.dnf.new.5536/dnf.changes 2019-04-28 20:12:01.830471536 +0200
@@ -1,0 +2,22 @@
+Fri Apr 26 11:11:22 UTC 2019 - Neal Gompa <ngompa13(a)gmail.com>
+
+- Update to version 4.2.5
+ + Fix multilib obsoletes (rh#1672947)
+ + Do not remove group package if other packages depend on it
+ + Remove duplicates from "dnf list" and "dnf info" outputs
+ + Installroot now requires absolute path
+ + Allow globs in setopt in repoid part
+ + Fix formatting of message about free space required
+ + [doc] Add info of relation update_cache with fill_sack (rh#1658694)
+ + Fix installation failiure when duplicate RPMs are specified (rh#1687286)
+ + Add command abbreviations (rh#1634232)
+ + Allow plugins to terminate dnf (rh#1701807)
+ + Fix installation of bash completion helper (rh#1695853)
+- Drop patches that are part of this release
+ * 0001-Add-command-abbreviations-RhBug-1634232.patch
+ * 0002-CMake-Actually-install-aliases.patch
+ * 0001-Fix-the-installation-of-completion_helper.py.patch
+- Backport fix for rendering exception messages in Python 3
+ * 0001-Python2-3-compatibility-for-exceptions-representatio.patch
+
+-------------------------------------------------------------------
Old:
----
0001-Add-command-abbreviations-RhBug-1634232.patch
0001-Fix-the-installation-of-completion_helper.py.patch
0002-CMake-Actually-install-aliases.patch
dnf-4.2.2.tar.gz
New:
----
0001-Python2-3-compatibility-for-exceptions-representatio.patch
dnf-4.2.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ dnf.spec ++++++
--- /var/tmp/diff_new_pack.oLbFU0/_old 2019-04-28 20:12:02.622471043 +0200
+++ /var/tmp/diff_new_pack.oLbFU0/_new 2019-04-28 20:12:02.626471041 +0200
@@ -17,7 +17,7 @@
#
-%global hawkey_version 0.28.1
+%global hawkey_version 0.31.0
%global libcomps_version 0.1.8
%global rpm_version 4.14.0
%global min_plugins_core 4.0.6
@@ -34,7 +34,7 @@
%bcond_with tests
Name: dnf
-Version: 4.2.2
+Version: 4.2.5
Release: 0
Summary: Package manager forked from Yum, using libsolv as a dependency resolver
# For a breakdown of the licensing, see PACKAGE-LICENSING
@@ -44,13 +44,8 @@
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
# Backports from upstream
-## Restore command abbreviations dropped between dnf 2.7.5 to now
-Patch0001: 0001-Add-command-abbreviations-RhBug-1634232.patch
-## Fix installation of aliases
-Patch0002: 0002-CMake-Actually-install-aliases.patch
-## Fix installation of completion helper
-Patch0003: 0001-Fix-the-installation-of-completion_helper.py.patch
-
+## Fix exception message reporting in Python 3
+Patch0001: 0001-Python2-3-compatibility-for-exceptions-representatio.patch
BuildRequires: bash-completion
BuildRequires: cmake
++++++ 0001-Python2-3-compatibility-for-exceptions-representatio.patch ++++++
>From db5772cd0c3742894f5f2285c5ce6a7dc0f5c0f8 Mon Sep 17 00:00:00 2001
From: Marek Blaha <mblaha(a)redhat.com>
Date: Tue, 23 Apr 2019 16:39:17 +0200
Subject: [PATCH] Python2/3 compatibility for exceptions representation
In Python3 the __unicode__() method is not called and that resulted in
different output when a MarkingError occured.
Python2:
Error: Unable to find a match: ninja-build-0:1.8.2-5.fc29.x86_64
Python3:
Error: Unable to find a match
---
dnf/exceptions.py | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/dnf/exceptions.py b/dnf/exceptions.py
index 336ec3c2..20db9b9d 100644
--- a/dnf/exceptions.py
+++ b/dnf/exceptions.py
@@ -39,10 +39,11 @@ class Error(Exception):
self.value = None if value is None else ucd(value)
def __str__(self):
- return "%s" %(self.value,)
+ return "{}".format(self.value)
def __unicode__(self):
- return '%s' % self.value
+ return ucd(self.__str__())
+
class CompsError(Error):
@@ -78,9 +79,6 @@ class DownloadError(Error):
def __str__(self):
return self.errmap2str(self.errmap)
- def __unicode__(self):
- return ucd(self.__str__())
-
class LockError(Error):
pass
@@ -94,8 +92,8 @@ class MarkingError(Error):
super(MarkingError, self).__init__(value)
self.pkg_spec = None if pkg_spec is None else ucd(pkg_spec)
- def __unicode__(self):
- string = super(MarkingError, self).__unicode__()
+ def __str__(self):
+ string = super(MarkingError, self).__str__()
if self.pkg_spec:
string += ': ' + self.pkg_spec
return string
--
2.20.1
++++++ dnf-4.2.2.tar.gz -> dnf-4.2.5.tar.gz ++++++
++++ 5549 lines of diff (skipped)
++++ retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/VERSION.cmake new/dnf-4.2.5/VERSION.cmake
--- old/dnf-4.2.2/VERSION.cmake 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/VERSION.cmake 2019-04-25 10:44:57.000000000 +0200
@@ -1 +1 @@
-SET(DNF_VERSION "4.2.2")
+SET(DNF_VERSION "4.2.5")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/base.py new/dnf-4.2.5/dnf/base.py
--- old/dnf-4.2.2/dnf/base.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/base.py 2019-04-25 10:44:57.000000000 +0200
@@ -74,6 +74,7 @@
import hawkey
import itertools
import logging
+import math
import os
import operator
import re
@@ -133,15 +134,13 @@
def _add_repo_to_sack(self, repo):
repo.load()
- hrepo = repo._hawkey_repo
- repo._repo.initHyRepo(hrepo)
mdload_flags = dict(load_filelists=True,
load_presto=repo.deltarpm,
load_updateinfo=True)
if repo.load_metadata_other:
mdload_flags["load_other"] = True
try:
- self._sack.load_repo(hrepo, build_cache=True, **mdload_flags)
+ self._sack.load_repo(repo._repo, build_cache=True, **mdload_flags)
except hawkey.Exception as e:
logger.debug(_("loading repo '{}' failure: {}").format(repo.id, e))
raise dnf.exceptions.RepoError(
@@ -353,7 +352,8 @@
repo._repo.setMaxMirrorTries(1)
if not self.repos._any_enabled():
- logger.info(_('There are no enabled repos.'))
+ logger.info(_('There are no enabled repositories in "{}".').format(
+ '", "'.join(self.conf.reposdir)))
return False
for r in self.repos.iter_enabled():
@@ -383,9 +383,6 @@
"""Prepare the Sack and the Goal objects. """
timer = dnf.logging.Timer('sack setup')
self.reset(sack=True, goal=True)
- if self._repos is not None:
- for repo in self._repos.values():
- repo._hawkey_repo = repo._init_hawkey_repo()
self._sack = dnf.sack._build_sack(self)
lock = dnf.lock.build_metadata_lock(self.conf.cachedir, self.conf.exit_on_lock)
with lock:
@@ -498,9 +495,6 @@
"""Make the Base object forget about various things."""
if sack:
self._sack = None
- if self._repos is not None:
- for repo in self._repos.values():
- repo._hawkey_repo = None
if repos:
self._repos = dnf.repodict.RepoDict()
if goal:
@@ -646,9 +640,10 @@
for pkg in goal.list_installs():
self._ds_callback.pkg_added(pkg, 'i')
obs = goal.obsoleted_by_package(pkg)
- # skip obsoleted packages that are not part of all_obsoleted
- # they are handled as upgrades/downgrades
- obs = [i for i in obs if i in all_obsoleted]
+ # Skip obsoleted packages that are not part of all_obsoleted,
+ # they are handled as upgrades/downgrades.
+ # Also keep RPMs with the same name - they're not always in all_obsoleted.
+ obs = [i for i in obs if i in all_obsoleted or i.name == pkg.name]
# TODO: move to libdnf: getBestReason
reason = goal.get_reason(pkg)
@@ -680,9 +675,11 @@
upgraded = obs.pop(0)
else:
obs.remove(upgraded)
- # skip obsoleted packages that are not part of all_obsoleted
- # they are handled as upgrades/downgrades
- obs = [i for i in obs if i in all_obsoleted]
+ # Skip obsoleted packages that are not part of all_obsoleted,
+ # they are handled as upgrades/downgrades.
+ # Also keep RPMs with the same name - they're not always in all_obsoleted.
+ obs = [i for i in obs if i in all_obsoleted or i.name == pkg.name]
+
cb = lambda pkg: self._ds_callback.pkg_added(pkg, 'od')
dnf.util.mapall(cb, obs)
if pkg in self._get_installonly_query():
@@ -895,13 +892,15 @@
"""
summary = ''
# do disk space report first
- p = re.compile(r'needs (\d+)MB on the (\S+) filesystem')
+ p = re.compile(r'needs (\d+)(K|M)B on the (\S+) filesystem')
disk = {}
for m in p.finditer(errstring):
- if m.group(2) not in disk:
- disk[m.group(2)] = int(m.group(1))
- if disk[m.group(2)] < int(m.group(1)):
- disk[m.group(2)] = int(m.group(1))
+ size_in_mb = int(m.group(1)) if m.group(2) == 'M' else math.ceil(
+ int(m.group(1)) / 1024.0)
+ if m.group(3) not in disk:
+ disk[m.group(3)] = size_in_mb
+ if disk[m.group(3)] < size_in_mb:
+ disk[m.group(3)] = size_in_mb
if disk:
summary += _('Disk Requirements:') + "\n"
@@ -1033,7 +1032,10 @@
return tid
def _verify_transaction(self, verify_pkg_cb=None):
- total = len(self.transaction)
+ transaction_items = [
+ tsi for tsi in self.transaction
+ if tsi.action != libdnf.transaction.TransactionItemAction_REASON_CHANGE]
+ total = len(transaction_items)
def display_banner(pkg, count):
count += 1
@@ -1062,7 +1064,7 @@
# because DNF trusts error codes returned by RPM.
# Verification banner is displayed to preserve UX.
# TODO: drop in future DNF
- for tsi in self._transaction:
+ for tsi in transaction_items:
count = display_banner(tsi.pkg, count)
rpmdbv = rpmdb_sack._rpmdb_version()
@@ -1464,9 +1466,16 @@
if not query:
return
- unneeded_pkgs = query._unneeded(self.history.swdb, debug_solver=False)
- unneeded_pkgs_history = query.filter(pkg=[i for i in query if self.history.group.is_removable_pkg(i.name)])
- unneeded_pkgs = unneeded_pkgs.union(unneeded_pkgs_history)
+ unneeded_pkgs = query._safe_to_remove(self.history.swdb, debug_solver=False)
+ unneeded_pkgs_history = query.filter(
+ pkg=[i for i in query if self.history.group.is_removable_pkg(i.name)])
+ pkg_with_dependent_pkgs = unneeded_pkgs_history.difference(unneeded_pkgs)
+
+ # mark packages with dependent packages as a dependency to allow removal with dependent
+ # package
+ for pkg in pkg_with_dependent_pkgs:
+ self.history.set_reason(pkg, libdnf.transaction.TransactionItemReason_DEPENDENCY)
+ unneeded_pkgs = unneeded_pkgs.intersection(unneeded_pkgs_history)
remove_packages = query.intersection(unneeded_pkgs)
if remove_packages:
@@ -1813,7 +1822,7 @@
logger.error(msg, spec)
no_match_pkg_specs.append(spec)
no_match_module_specs = []
- module_debsolv_errors = ()
+ module_depsolv_errors = ()
if WITH_MODULES and install_specs.grp_specs:
try:
module_base = dnf.module.module_base.ModuleBase(self)
@@ -1825,7 +1834,7 @@
if e.error_group_specs:
for e_spec in e.error_group_specs:
error_group_specs.append("@" + e_spec)
- module_debsolv_errors = e.module_debsolv_errors
+ module_depsolv_errors = e.module_depsolv_errors
else:
no_match_module_specs = install_specs.grp_specs
@@ -1836,12 +1845,12 @@
self._install_groups(no_match_module_specs, exclude_specs, no_match_group_specs, strict)
if no_match_group_specs or error_group_specs or no_match_pkg_specs or error_pkg_specs \
- or module_debsolv_errors:
+ or module_depsolv_errors:
raise dnf.exceptions.MarkingErrors(no_match_group_specs=no_match_group_specs,
error_group_specs=error_group_specs,
no_match_pkg_specs=no_match_pkg_specs,
error_pkg_specs=error_pkg_specs,
- module_debsolv_errors=module_debsolv_errors)
+ module_depsolv_errors=module_depsolv_errors)
def install(self, pkg_spec, reponame=None, strict=True, forms=None):
# :api
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/CMakeLists.txt new/dnf-4.2.5/dnf/cli/CMakeLists.txt
--- old/dnf-4.2.2/dnf/cli/CMakeLists.txt 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/CMakeLists.txt 2019-04-25 10:44:57.000000000 +0200
@@ -1,4 +1,6 @@
FILE(GLOB cli_SRCS *.py)
INSTALL (FILES ${cli_SRCS} DESTINATION ${PYTHON_INSTALL_DIR}/dnf/cli)
+# completion_helper.py is generated so the glob alone won't see it:
+INSTALL (FILES completion_helper.py DESTINATION ${PYTHON_INSTALL_DIR}/dnf/cli)
-ADD_SUBDIRECTORY (commands)
\ No newline at end of file
+ADD_SUBDIRECTORY (commands)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/__init__.py new/dnf-4.2.5/dnf/cli/commands/__init__.py
--- old/dnf-4.2.2/dnf/cli/commands/__init__.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/__init__.py 2019-04-25 10:44:57.000000000 +0200
@@ -97,8 +97,7 @@
scheme = dnf.pycomp.urlparse.urlparse(lfile)[0]
if scheme in ('http', 'ftp', 'file', 'https'):
return
-
- msg = _('There are no enabled repos.')
+ msg = _('There are no enabled repositories in "{}".').format('", "'.join(base.conf.reposdir))
raise dnf.cli.CliError(msg)
@@ -236,7 +235,7 @@
provides command.
"""
- aliases = ('provides', 'whatprovides')
+ aliases = ('provides', 'whatprovides', 'prov')
summary = _('find what package provides the given value')
@staticmethod
@@ -817,7 +816,7 @@
history command.
"""
- aliases = ('history',)
+ aliases = ('history', 'hist')
summary = _('display, or use, the transaction history')
transaction_ids = set()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/distrosync.py new/dnf-4.2.5/dnf/cli/commands/distrosync.py
--- old/dnf-4.2.2/dnf/cli/commands/distrosync.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/distrosync.py 2019-04-25 10:44:57.000000000 +0200
@@ -28,7 +28,7 @@
distro-synch command.
"""
- aliases = ('distro-sync', 'distrosync', 'distribution-synchronization')
+ aliases = ('distro-sync', 'distrosync', 'distribution-synchronization', 'dsync')
summary = _('synchronize installed packages to the latest available versions')
@staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/downgrade.py new/dnf-4.2.5/dnf/cli/commands/downgrade.py
--- old/dnf-4.2.2/dnf/cli/commands/downgrade.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/downgrade.py 2019-04-25 10:44:57.000000000 +0200
@@ -30,7 +30,7 @@
downgrade command.
"""
- aliases = ('downgrade',)
+ aliases = ('downgrade', 'dg')
summary = _("Downgrade a package")
@staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/group.py new/dnf-4.2.5/dnf/cli/commands/group.py
--- old/dnf-4.2.2/dnf/cli/commands/group.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/group.py 2019-04-25 10:44:57.000000000 +0200
@@ -41,7 +41,7 @@
'groupremove' : 'remove',
'grouperase' : 'remove',
'groupinfo' : 'info'}
- aliases = ('group', 'groups') + tuple(direct_commands.keys())
+ aliases = ('group', 'groups', 'grp') + tuple(direct_commands.keys())
summary = _('display, or use, the groups information')
_CMD_ALIASES = {'update' : 'upgrade',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/install.py new/dnf-4.2.5/dnf/cli/commands/install.py
--- old/dnf-4.2.2/dnf/cli/commands/install.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/install.py 2019-04-25 10:44:57.000000000 +0200
@@ -43,7 +43,7 @@
'install-nevra': hawkey.FORM_NEVRA}
alternatives_provide = 'alternative-for({})'
- aliases = ('install', 'localinstall') + tuple(nevra_forms.keys())
+ aliases = ('install', 'localinstall', 'in') + tuple(nevra_forms.keys())
summary = _('install a package or packages on your system')
@staticmethod
@@ -91,10 +91,10 @@
if e.error_group_specs:
for e_spec in e.error_group_specs:
error_module_specs.append("@" + e_spec)
- module_debsolv_errors = e.module_debsolv_errors
- if module_debsolv_errors:
+ module_depsolv_errors = e.module_depsolv_errors
+ if module_depsolv_errors:
logger.error(dnf.module.module_base.format_modular_solver_errors(
- module_debsolv_errors[0]))
+ module_depsolv_errors[0]))
else:
skipped_grp_specs = self.opts.grp_specs
if self.opts.filenames and nevra_forms:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/makecache.py new/dnf-4.2.5/dnf/cli/commands/makecache.py
--- old/dnf-4.2.2/dnf/cli/commands/makecache.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/makecache.py 2019-04-25 10:44:57.000000000 +0200
@@ -33,7 +33,7 @@
class MakeCacheCommand(commands.Command):
- aliases = ('makecache',)
+ aliases = ('makecache', 'mc')
summary = _('generate the metadata cache')
@staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/module.py new/dnf-4.2.5/dnf/cli/commands/module.py
--- old/dnf-4.2.2/dnf/cli/commands/module.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/module.py 2019-04-25 10:44:57.000000000 +0200
@@ -118,7 +118,7 @@
if self.base.conf.strict:
if e.no_match_group_specs or e.error_group_specs:
raise e
- if e.module_debsolv_errors and e.module_debsolv_errors[1] != \
+ if e.module_depsolv_errors and e.module_depsolv_errors[1] != \
libdnf.module.ModulePackageContainer.ModuleErrorType_ERROR_IN_DEFAULTS:
raise e
logger.error(str(e))
@@ -149,7 +149,7 @@
if self.base.conf.strict:
if e.no_match_group_specs or e.error_group_specs:
raise e
- if e.module_debsolv_errors and e.module_debsolv_errors[1] != \
+ if e.module_depsolv_errors and e.module_depsolv_errors[1] != \
libdnf.module.ModulePackageContainer.ModuleErrorType_ERROR_IN_DEFAULTS:
raise e
logger.error(str(e))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/reinstall.py new/dnf-4.2.5/dnf/cli/commands/reinstall.py
--- old/dnf-4.2.2/dnf/cli/commands/reinstall.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/reinstall.py 2019-04-25 10:44:57.000000000 +0200
@@ -34,7 +34,7 @@
"""A class containing methods needed by the cli to execute the reinstall command.
"""
- aliases = ('reinstall',)
+ aliases = ('reinstall', 'rei')
summary = _('reinstall a package')
@staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/remove.py new/dnf-4.2.5/dnf/cli/commands/remove.py
--- old/dnf-4.2.2/dnf/cli/commands/remove.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/remove.py 2019-04-25 10:44:57.000000000 +0200
@@ -42,7 +42,7 @@
'erase-na': hawkey.FORM_NA,
'erase-nevra': hawkey.FORM_NEVRA}
- aliases = ('remove', 'erase',) + tuple(nevra_forms.keys())
+ aliases = ('remove', 'erase', 'rm') + tuple(nevra_forms.keys())
summary = _('remove a package or packages from your system')
@staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/repoquery.py new/dnf-4.2.5/dnf/cli/commands/repoquery.py
--- old/dnf-4.2.2/dnf/cli/commands/repoquery.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/repoquery.py 2019-04-25 10:44:57.000000000 +0200
@@ -100,7 +100,7 @@
'repoquery-na': hawkey.FORM_NA,
'repoquery-nevra': hawkey.FORM_NEVRA}
- aliases = ('repoquery',) + tuple(nevra_forms.keys())
+ aliases = ('repoquery', 'rq') + tuple(nevra_forms.keys())
summary = _('search for packages matching keyword')
@staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/search.py new/dnf-4.2.5/dnf/cli/commands/search.py
--- old/dnf-4.2.2/dnf/cli/commands/search.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/search.py 2019-04-25 10:44:57.000000000 +0200
@@ -42,7 +42,7 @@
search command.
"""
- aliases = ('search',)
+ aliases = ('search', 'se')
summary = _('search package details for the given string')
@staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/shell.py new/dnf-4.2.5/dnf/cli/commands/shell.py
--- old/dnf-4.2.2/dnf/cli/commands/shell.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/shell.py 2019-04-25 10:44:57.000000000 +0200
@@ -43,7 +43,7 @@
class ShellCommand(commands.Command, cmd.Cmd):
- aliases = ('shell',)
+ aliases = ('shell', 'sh')
summary = _('run an interactive DNF shell')
MAPPING = {'repo': 'repo',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/upgrade.py new/dnf-4.2.5/dnf/cli/commands/upgrade.py
--- old/dnf-4.2.2/dnf/cli/commands/upgrade.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/upgrade.py 2019-04-25 10:44:57.000000000 +0200
@@ -36,7 +36,7 @@
"""A class containing methods needed by the cli to execute the
update command.
"""
- aliases = ('upgrade', 'update', 'upgrade-to', 'update-to', 'localupdate')
+ aliases = ('upgrade', 'update', 'upgrade-to', 'update-to', 'localupdate', 'up')
summary = _('upgrade a package or packages on your system')
@staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/commands/upgrademinimal.py new/dnf-4.2.5/dnf/cli/commands/upgrademinimal.py
--- old/dnf-4.2.2/dnf/cli/commands/upgrademinimal.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/commands/upgrademinimal.py 2019-04-25 10:44:57.000000000 +0200
@@ -27,7 +27,7 @@
command.
"""
- aliases = ('upgrade-minimal', 'update-minimal')
+ aliases = ('upgrade-minimal', 'update-minimal', 'up-min')
summary = _("upgrade, but only 'newest' package match which fixes a problem"
" that affects your system")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/cli/output.py new/dnf-4.2.5/dnf/cli/output.py
--- old/dnf-4.2.2/dnf/cli/output.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/cli/output.py 2019-04-25 10:44:57.000000000 +0200
@@ -647,6 +647,14 @@
if len(lst) > 0:
thingslisted = 1
print('%s' % description)
+ info_set = set()
+ if outputType == 'list':
+ unique_item_dict = {}
+ for pkg in lst:
+ unique_item_dict[str(pkg) + str(pkg._from_repo)] = pkg
+
+ lst = unique_item_dict.values()
+
for pkg in sorted(lst):
key = (pkg.name, pkg.arch)
highlight = False
@@ -663,7 +671,7 @@
self.simpleList(pkg, ui_overflow=True,
highlight=highlight, columns=columns)
elif outputType == 'info':
- print(self.infoOutput(pkg, highlight=highlight) + "\n")
+ info_set.add(self.infoOutput(pkg, highlight=highlight) + "\n")
elif outputType == 'name':
self.simple_name_list(pkg)
elif outputType == 'nevra':
@@ -671,6 +679,9 @@
else:
pass
+ if info_set:
+ print("\n".join(sorted(info_set)))
+
if thingslisted == 0:
return 1, [_('No packages to list')]
return 0, []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/conf/config.py new/dnf-4.2.5/dnf/conf/config.py
--- old/dnf-4.2.2/dnf/conf/config.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/conf/config.py 2019-04-25 10:44:57.000000000 +0200
@@ -24,7 +24,7 @@
from dnf.i18n import ucd, _
from dnf.pycomp import basestring
-import copy
+import fnmatch
import dnf.conf.substitutions
import dnf.const
import dnf.exceptions
@@ -438,10 +438,10 @@
self._set_value(optname, False, dnf.conf.PRIO_COMMANDLINE)
repo_setopts = getattr(opts, 'repo_setopts', {})
- if self._section in repo_setopts:
- # pylint: disable=W0212
- setopts = repo_setopts[self._section].items()
- for name, values in setopts:
+ for repoid, setopts in repo_setopts.items():
+ if not fnmatch.fnmatch(self._section, repoid):
+ continue
+ for name, values in setopts.items():
for val in values:
if hasattr(self._config, name):
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/exceptions.py new/dnf-4.2.5/dnf/exceptions.py
--- old/dnf-4.2.2/dnf/exceptions.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/exceptions.py 2019-04-25 10:44:57.000000000 +0200
@@ -21,6 +21,7 @@
from dnf.i18n import ucd, _, P_
import dnf.util
import libdnf
+import warnings
class DeprecationWarning(DeprecationWarning):
# :api
@@ -102,7 +103,7 @@
class MarkingErrors(Error):
def __init__(self, no_match_group_specs=(), error_group_specs=(), no_match_pkg_specs=(),
- error_pkg_specs=(), module_debsolv_errors=()):
+ error_pkg_specs=(), module_depsolv_errors=()):
"""Initialize the marking error instance."""
msg = _("Problems in request:")
if (no_match_pkg_specs):
@@ -113,25 +114,32 @@
msg += "\n" + _("missing groups or modules: ") + ", ".join(no_match_group_specs)
if (error_group_specs):
msg += "\n" + _("broken groups or modules: ") + ", ".join(error_group_specs)
- if (module_debsolv_errors):
- msg_mod = dnf.util._format_resolve_problems(module_debsolv_errors[0])
- if module_debsolv_errors[1] == \
+ if (module_depsolv_errors):
+ msg_mod = dnf.util._format_resolve_problems(module_depsolv_errors[0])
+ if module_depsolv_errors[1] == \
libdnf.module.ModulePackageContainer.ModuleErrorType_ERROR_IN_DEFAULTS:
msg += "\n" + "\n".join([P_('Modular dependency problem with Defaults:',
'Modular dependency problems with Defaults:',
- len(module_debsolv_errors)),
+ len(module_depsolv_errors)),
msg_mod])
else:
msg += "\n" + "\n".join([P_('Modular dependency problem:',
'Modular dependency problems:',
- len(module_debsolv_errors)),
+ len(module_depsolv_errors)),
msg_mod])
super(MarkingErrors, self).__init__(msg)
self.no_match_group_specs = no_match_group_specs
self.error_group_specs = error_group_specs
self.no_match_pkg_specs = no_match_pkg_specs
self.error_pkg_specs = error_pkg_specs
- self.module_debsolv_errors = module_debsolv_errors
+ self.module_depsolv_errors = module_depsolv_errors
+
+ @property
+ def module_debsolv_errors(self):
+ msg = "Attribute module_debsolv_errors is deprecated. Use module_depsolv_errors " \
+ "attribute instead."
+ warnings.warn(msg, DeprecationWarning, stacklevel=2)
+ return self.module_depsolv_errors
class MetadataError(Error):
pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/i18n.py new/dnf-4.2.5/dnf/i18n.py
--- old/dnf-4.2.2/dnf/i18n.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/i18n.py 2019-04-25 10:44:57.000000000 +0200
@@ -80,11 +80,16 @@
def setup_locale():
try:
dnf.pycomp.setlocale(locale.LC_ALL, '')
- except locale.Error as e:
- # default to C locale if we get a failure.
- print('Failed to set locale, defaulting to C', file=sys.stderr)
- os.environ['LC_ALL'] = 'C'
- dnf.pycomp.setlocale(locale.LC_ALL, 'C')
+ except locale.Error:
+ # default to C.UTF-8 or C locale if we got a failure.
+ try:
+ dnf.pycomp.setlocale(locale.LC_ALL, 'C.UTF-8')
+ os.environ['LC_ALL'] = 'C.UTF-8'
+ except locale.Error:
+ dnf.pycomp.setlocale(locale.LC_ALL, 'C')
+ os.environ['LC_ALL'] = 'C'
+ print('Failed to set locale, defaulting to {}'.format(os.environ['LC_ALL']),
+ file=sys.stderr)
def setup_stdout():
""" Check that stdout is of suitable encoding and handle the situation if
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/module/module_base.py new/dnf-4.2.5/dnf/module/module_base.py
--- old/dnf-4.2.2/dnf/module/module_base.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/module/module_base.py 2019-04-25 10:44:57.000000000 +0200
@@ -48,13 +48,13 @@
if no_match_specs or error_specs or solver_errors:
raise dnf.exceptions.MarkingErrors(no_match_group_specs=no_match_specs,
error_group_specs=error_specs,
- module_debsolv_errors=solver_errors)
+ module_depsolv_errors=solver_errors)
def disable(self, module_specs):
no_match_specs, solver_errors = self._modules_reset_or_disable(module_specs, STATE_DISABLED)
if no_match_specs or solver_errors:
raise dnf.exceptions.MarkingErrors(no_match_group_specs=no_match_specs,
- module_debsolv_errors=solver_errors)
+ module_depsolv_errors=solver_errors)
def install(self, module_specs, strict=True):
no_match_specs, error_specs, solver_errors, module_dicts = \
@@ -126,13 +126,13 @@
if no_match_specs or error_specs or solver_errors:
raise dnf.exceptions.MarkingErrors(no_match_group_specs=no_match_specs,
error_group_specs=error_specs,
- module_debsolv_errors=solver_errors)
+ module_depsolv_errors=solver_errors)
def reset(self, module_specs):
no_match_specs, solver_errors = self._modules_reset_or_disable(module_specs, STATE_UNKNOWN)
if no_match_specs:
raise dnf.exceptions.MarkingErrors(no_match_group_specs=no_match_specs,
- module_debsolv_errors=solver_errors)
+ module_depsolv_errors=solver_errors)
def upgrade(self, module_specs):
no_match_specs = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/plugin.py new/dnf-4.2.5/dnf/plugin.py
--- old/dnf-4.2.2/dnf/plugin.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/plugin.py 2019-04-25 10:44:57.000000000 +0200
@@ -102,6 +102,8 @@
for plugin in self.plugins:
try:
getattr(plugin, method)()
+ except dnf.exceptions.Error:
+ raise
except Exception:
exc_type, exc_value, exc_traceback = sys.exc_info()
except_list = traceback.format_exception(exc_type, exc_value, exc_traceback)
@@ -194,7 +196,7 @@
try:
module = importlib.import_module(name)
except Exception as e:
- logger.error(_('Failed loading plugin: %s'), module)
+ logger.error(_('Failed loading plugin "%s": %s'), module, e)
logger.log(dnf.logging.SUBDEBUG, '', exc_info=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/repo.py new/dnf-4.2.5/dnf/repo.py
--- old/dnf-4.2.2/dnf/repo.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/repo.py 2019-04-25 10:44:57.000000000 +0200
@@ -436,7 +436,6 @@
if parent_conf:
self._repo.setSubstitutions(parent_conf.substitutions)
self._substitutions = dnf.conf.substitutions.Substitutions()
- self._hawkey_repo = self._init_hawkey_repo()
self._check_config_file_age = parent_conf.check_config_file_age \
if parent_conf is not None else True
@@ -488,16 +487,6 @@
def __setattr__(self, name, value):
super(Repo, self).__setattr__(name, value)
- if name == 'cost':
- self._hawkey_repo.cost = self.cost
- if name == 'priority':
- self._hawkey_repo.priority = self.priority
-
- def _init_hawkey_repo(self):
- hrepo = hawkey.Repo(self.id)
- hrepo.cost = self.cost
- hrepo.priority = self.priority
- return hrepo
def disable(self):
# :api
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/rpm/transaction.py new/dnf-4.2.5/dnf/rpm/transaction.py
--- old/dnf-4.2.2/dnf/rpm/transaction.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/rpm/transaction.py 2019-04-25 10:44:57.000000000 +0200
@@ -11,6 +11,7 @@
from __future__ import absolute_import
from __future__ import unicode_literals
+from dnf.i18n import _
import rpm
read_ts = None
@@ -111,9 +112,11 @@
self.ts.setFlags(origflags)
reserrors = []
- if tserrors:
+ if tserrors is not None:
for (descr, (etype, mount, need)) in tserrors:
reserrors.append(descr)
+ if not reserrors:
+ reserrors.append(_('Errors occurred during test transaction.'))
return reserrors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/sack.py new/dnf-4.2.5/dnf/sack.py
--- old/dnf-4.2.2/dnf/sack.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/sack.py 2019-04-25 10:44:57.000000000 +0200
@@ -31,7 +31,6 @@
class Sack(hawkey.Sack):
def __init__(self, *args, **kwargs):
super(Sack, self).__init__(*args, **kwargs)
- self._moduleContainer = None
def _configure(self, installonly=None, installonly_limit=0):
if installonly:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf/util.py new/dnf-4.2.5/dnf/util.py
--- old/dnf-4.2.2/dnf/util.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf/util.py 2019-04-25 10:44:57.000000000 +0200
@@ -63,7 +63,11 @@
setattr(namespace, "filenames", [])
setattr(namespace, "grp_specs", [])
setattr(namespace, "pkg_specs", [])
+ tmp_set = set()
for value in values:
+ if value in tmp_set:
+ continue
+ tmp_set.add(value)
schemes = dnf.pycomp.urlparse.urlparse(value)[0]
if value.endswith('.rpm'):
namespace.filenames.append(value)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/dnf.spec new/dnf-4.2.5/dnf.spec
--- old/dnf-4.2.2/dnf.spec 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/dnf.spec 2019-04-25 10:44:57.000000000 +0200
@@ -1,5 +1,5 @@
# default dependencies
-%global hawkey_version 0.28.0
+%global hawkey_version 0.31.0
%global libcomps_version 0.1.8
%global libmodulemd_version 1.4.0
%global rpm_version 4.14.0
@@ -79,7 +79,7 @@
It supports RPMs, modules and comps groups & environments.
Name: dnf
-Version: 4.2.2
+Version: 4.2.5
Release: 1%{?dist}
Summary: %{pkg_summary}
# For a breakdown of the licensing, see PACKAGE-LICENSING
@@ -212,7 +212,7 @@
%description -n python2-%{name}
Python 2 interface to DNF.
%endif
-# ^ %{with python2}
+# ^ %%{with python2}
%if %{with python3}
%package -n python3-%{name}
@@ -412,6 +412,7 @@
%dir %{confdir}/protected.d
%dir %{confdir}/vars
%dir %{confdir}/aliases.d
+%exclude %{confdir}/aliases.d/zypper.conf
%config(noreplace) %{confdir}/%{name}.conf
%config(noreplace) %{confdir}/protected.d/%{name}.conf
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
@@ -498,6 +499,19 @@
%endif
%changelog
+* Thu Apr 25 2019 Pavla Kratochvilova <pkratoch(a)redhat.com> - 4.2.5-1
+- Fix multilib obsoletes (RhBug:1672947)
+- Do not remove group package if other packages depend on it
+- Remove duplicates from "dnf list" and "dnf info" outputs
+- Installroot now requires absolute path
+- Fix the installation of completion_helper.py
+- Allow globs in setopt in repoid part
+- Fix formatting of message about free space required
+- [doc] Add info of relation update_cache with fill_sack (RhBug:1658694)
+- Fix installation failiure when duplicit RPMs are specified (RhBug:1687286)
+- Add command abbreviations (RhBug:1634232)
+- Allow plugins to terminate dnf (RhBug:1701807)
+
* Wed Mar 27 2019 Pavla Kratochvilova <pkratoch(a)redhat.com> - 4.2.2-1
- [conf] Use environment variables prefixed with DNF_VAR_
- Enhance documentation of --whatdepends option (RhBug:1687070)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/doc/api_base.rst new/dnf-4.2.5/doc/api_base.rst
--- old/dnf-4.2.2/doc/api_base.rst 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/doc/api_base.rst 2019-04-25 10:44:57.000000000 +0200
@@ -146,9 +146,15 @@
.. method:: update_cache(timer=False)
- Downloads and caches in binary format metadata for all known repos. Tries to avoid downloading whenever possible (e.g. when the local metadata hasn’t expired yet or when the metadata timestamp hasn’t changed).
+ Downloads and caches in binary format metadata for all known repos. Tries to avoid downloading
+ whenever possible (e.g. when the local metadata hasn’t expired yet or when the metadata
+ timestamp hasn’t changed).
- If 'timer' equals 'True', DNF becomes more resource-aware, meaning DNF will not do anything if running on battery power and will terminate immediately if it’s too soon after the last successful update_cache operation7.
+ If 'timer' equals 'True', DNF becomes more resource-aware, meaning DNF will not do anything if
+ running on battery power and will terminate immediately if it’s too soon after the last
+ successful update_cache operation.
+
+ When the method is used after :meth:`fill_sack`, information about packages will not be updated.
.. _package_marking-label:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/doc/api_cli.rst new/dnf-4.2.5/doc/api_cli.rst
--- old/dnf-4.2.2/doc/api_cli.rst 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/doc/api_cli.rst 2019-04-25 10:44:57.000000000 +0200
@@ -37,7 +37,7 @@
.. attribute:: allow_erasing
- If ``True``, the dependnecy solver is allowed to look for solutions that include removing other packages while looking to fulfill the current packaging requests. Defaults to ``False``. Also see :meth:`dnf.Base.resolve`.
+ If ``True``, the dependency solver is allowed to look for solutions that include removing other packages while looking to fulfill the current packaging requests. Defaults to ``False``. Also see :meth:`dnf.Base.resolve`.
.. attribute:: available_repos
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/doc/api_conf.rst new/dnf-4.2.5/doc/api_conf.rst
--- old/dnf-4.2.2/doc/api_conf.rst 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/doc/api_conf.rst 2019-04-25 10:44:57.000000000 +0200
@@ -100,7 +100,7 @@
.. attribute:: installroot
- The root of the filesystem for all packaging operations.
+ The root of the filesystem for all packaging operations. It requires absolute path.
.. attribute:: keepcache
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/doc/api_queries.rst new/dnf-4.2.5/doc/api_queries.rst
--- old/dnf-4.2.2/doc/api_queries.rst 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/doc/api_queries.rst 2019-04-25 10:44:57.000000000 +0200
@@ -85,7 +85,7 @@
upgrades boolean see :meth:`upgrades`. Defaults to ``False``.
=============== ============== ======================================================
- *The key can also accept a list of values with specified type.
+ \* The key can also accept a list of values with specified type.
The key name can be supplemented with a relation-specifying suffix, separated by ``__``:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/doc/cli_vs_yum.rst new/dnf-4.2.5/doc/cli_vs_yum.rst
--- old/dnf-4.2.2/doc/cli_vs_yum.rst 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/doc/cli_vs_yum.rst 2019-04-25 10:44:57.000000000 +0200
@@ -391,11 +391,11 @@
``package-cleanup --oldkernels`` ``dnf remove --oldinstallonly``
================================== =====================================
-================
-yum-updateonboot
-================
+=============================
+yum-updateonboot and yum-cron
+=============================
-DNF does not have a direct replacement of yum-updateonboot command.
+DNF does not have a direct replacement of yum-updateonboot and yum-cron commands.
However, the similar result can be achieved by ``dnf automatic`` command (see :doc:`automatic`).
You can either use the shortcut::
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/doc/command_ref.rst new/dnf-4.2.5/doc/command_ref.rst
--- old/dnf-4.2.2/doc/command_ref.rst 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/doc/command_ref.rst 2019-04-25 10:44:57.000000000 +0200
@@ -228,7 +228,7 @@
``--installroot=<path>``
Specifies an alternative installroot, relative to where all packages will be
installed. Think of this like doing ``chroot <root> dnf``, except using
- ``--installroot`` allows dnf to work before the chroot is created.
+ ``--installroot`` allows dnf to work before the chroot is created. It requires absolute path.
- *cachedir*, *log files*, *releasever*, and *gpgkey* are taken from or
stored in the installroot. *Gpgkeys* are imported into the installroot from
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/doc/release_notes.rst new/dnf-4.2.5/doc/release_notes.rst
--- old/dnf-4.2.2/doc/release_notes.rst 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/doc/release_notes.rst 2019-04-25 10:44:57.000000000 +0200
@@ -20,6 +20,30 @@
###################
===================
+4.2.5 Release Notes
+===================
+
+- Fix multilib obsoletes (RhBug:1672947)
+- Do not remove group package if other packages depend on it
+- Remove duplicates from "dnf list" and "dnf info" outputs
+- Installroot now requires absolute path
+- Fix the installation of completion_helper.py
+- Allow globs in setopt in repoid part
+- Fix formatting of message about free space required
+- [doc] Add info of relation update_cache with fill_sack (RhBug:1658694)
+- Fix installation failiure when duplicit RPMs are specified (RhBug:1687286)
+- Add command abbreviations (RhBug:1634232)
+- Allow plugins to terminate dnf (RhBug:1701807)
+
+Bugs fixed in 4.2.5:
+
+* :rhbug:`1701807`
+* :rhbug:`1634232`
+* :rhbug:`1687286`
+* :rhbug:`1658694`
+* :rhbug:`1672947`
+
+===================
4.2.2 Release Notes
===================
@@ -355,6 +379,7 @@
* :attr:`dnf.conf.Conf.ignorearch`
* Introduced new configuration option ``autocheck_running_kernel``
* :meth:`dnf.subject.Subject.get_best_selector` can use three additional key words: ``obsoletes``, ``reports``, and ``reponame``.
+
From commandline it is possible to use new option ``--noautoremove`` to disable removal of dependencies that are no longer used.
Bugs fixed in 2.6.2:
@@ -625,8 +650,7 @@
* ``--releasever`` :doc:`command line argument <command_ref>` now doesn't detect release number from running system.
* ``--repofrompath`` :doc:`command line argument <command_ref>` can now be combined with ``--repo`` instead of ``--enablerepo``.
* Alternative of yum's ``deplist`` changes from ``dnf repoquery --requires`` to ``dnf repoquery --deplist``.
-* New systemd units `dnf-automatic-notifyonly`, `dnf-automatic-download`, `dnf-automatic-download`
-were added for a better customizability of :doc:`dnf-automatic <automatic>`.
+* New systemd units `dnf-automatic-notifyonly`, `dnf-automatic-download`, `dnf-automatic-download` were added for a better customizability of :doc:`dnf-automatic <automatic>`.
DNF command additions in 2.0.0:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/doc/summaries_cache new/dnf-4.2.5/doc/summaries_cache
--- old/dnf-4.2.2/doc/summaries_cache 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/doc/summaries_cache 2019-04-25 10:44:57.000000000 +0200
@@ -2702,5 +2702,25 @@
[
1687070,
"[REF] Provide single command, which tells what depends on specific package."
+ ],
+ [
+ 1701807,
+ "dnf ignores exception error raised by plugin etckeeper-dnf"
+ ],
+ [
+ 1634232,
+ "dnf lost aliases for command arguments"
+ ],
+ [
+ 1687286,
+ "Specifying same RPM filename in commandline breaks installation"
+ ],
+ [
+ 1658694,
+ "DNF Python API update_cache() breaks transaction check"
+ ],
+ [
+ 1672947,
+ "dnf prints tracebacks RuntimeError: TransactionItem not found for key"
]
]
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/etc/dnf/CMakeLists.txt new/dnf-4.2.5/etc/dnf/CMakeLists.txt
--- old/dnf-4.2.2/etc/dnf/CMakeLists.txt 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/etc/dnf/CMakeLists.txt 2019-04-25 10:44:57.000000000 +0200
@@ -1,2 +1,3 @@
INSTALL (FILES "dnf.conf" "automatic.conf" DESTINATION ${SYSCONFDIR}/dnf)
+ADD_SUBDIRECTORY (aliases.d)
ADD_SUBDIRECTORY (protected.d)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/etc/dnf/aliases.d/CMakeLists.txt new/dnf-4.2.5/etc/dnf/aliases.d/CMakeLists.txt
--- old/dnf-4.2.2/etc/dnf/aliases.d/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/dnf-4.2.5/etc/dnf/aliases.d/CMakeLists.txt 2019-04-25 10:44:57.000000000 +0200
@@ -0,0 +1 @@
+INSTALL (FILES "zypper.conf" DESTINATION ${SYSCONFDIR}/dnf/aliases.d)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/etc/dnf/aliases.d/zypper.conf new/dnf-4.2.5/etc/dnf/aliases.d/zypper.conf
--- old/dnf-4.2.2/etc/dnf/aliases.d/zypper.conf 1970-01-01 01:00:00.000000000 +0100
+++ new/dnf-4.2.5/etc/dnf/aliases.d/zypper.conf 2019-04-25 10:44:57.000000000 +0200
@@ -0,0 +1,7 @@
+[aliases]
+dup = distro-sync
+dist-upgrade = distro-sync
+ref = makecache
+refresh = makecache
+ri = reinstall
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/po/CMakeLists.txt new/dnf-4.2.5/po/CMakeLists.txt
--- old/dnf-4.2.2/po/CMakeLists.txt 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/po/CMakeLists.txt 2019-04-25 10:44:57.000000000 +0200
@@ -3,7 +3,7 @@
file (RELATIVE_PATH SRCDIR ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/dnf)
ADD_CUSTOM_TARGET (gettext-export
find ${SRCDIR} -iname "*.py" |
- xargs xgettext --from-code=UTF-8 --keyword=P_:1,2 --keyword=C_:1c,2 -c --output=dnf.pot &&
+ xargs xgettext -F --from-code=UTF-8 --keyword=P_:1,2 --keyword=C_:1c,2 -c --output=dnf.pot &&
zanata push -f
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Pushing translation source file to zanata")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/rel-eng/packages/dnf new/dnf-4.2.5/rel-eng/packages/dnf
--- old/dnf-4.2.2/rel-eng/packages/dnf 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/rel-eng/packages/dnf 2019-04-25 10:44:57.000000000 +0200
@@ -1 +1 @@
-4.2.2-1 ./
+4.2.5-1 ./
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/tests/conf/test_parser.py new/dnf-4.2.5/tests/conf/test_parser.py
--- old/dnf-4.2.2/tests/conf/test_parser.py 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/tests/conf/test_parser.py 2019-04-25 10:44:57.000000000 +0200
@@ -60,4 +60,4 @@
conf = dnf.conf.Conf()
conf.config_file_path = FN
conf.read()
- self.assertEqual(conf.installroot, '')
+ self.assertEqual(conf.reposdir, '')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/dnf-4.2.2/tests/etc/empty_option.conf new/dnf-4.2.5/tests/etc/empty_option.conf
--- old/dnf-4.2.2/tests/etc/empty_option.conf 2019-03-27 12:42:04.000000000 +0100
+++ new/dnf-4.2.5/tests/etc/empty_option.conf 2019-04-25 10:44:57.000000000 +0200
@@ -1,2 +1,2 @@
[main]
-installroot =
+reposdir =
1
0