Date: Saturday, December 29, 2018 @ 17:11:09
  Author: felixonmars
Revision: 418870

upgpkg: deepin-go-lib 1.7.0-1

Modified:
  deepin-go-lib/trunk/PKGBUILD
  deepin-go-lib/trunk/dbus-fix.patch

----------------+
 PKGBUILD       |    8 +--
 dbus-fix.patch |  141 ++++++++++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 122 insertions(+), 27 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2018-12-29 17:09:55 UTC (rev 418869)
+++ PKGBUILD    2018-12-29 17:11:09 UTC (rev 418870)
@@ -1,8 +1,8 @@
 # Maintainer: Felix Yan <[email protected]>
 
 pkgname=deepin-go-lib
-pkgver=1.6.0
-pkgrel=2
+pkgver=1.7.0
+pkgrel=1
 pkgdesc='A library containing many useful go routines for things such as glib, 
gettext, archive, graphic,etc.'
 arch=('any')
 url="https://github.com/linuxdeepin/go-lib";
@@ -10,8 +10,8 @@
 depends=('libpulse' 'gdk-pixbuf2' 'mobile-broadband-provider-info' 'libx11')
 
source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxdeepin/go-lib/archive/$pkgver.tar.gz";
         dbus-fix.patch)
-sha512sums=('c350792d5a445d0f235f0402e36952c7ff9e5a88bf39b41fa2ae6a31f9cbd67e73c6426f4bc76bc14d465fc84750ee2f65f4450ecbe725a0d5ce7169a7c2182c'
-            
'80a540358c2d9c51b647d7afa1b9c2a075677b596861fdb894f97298ba580b242f8cfcaa3d0ac7b8a4fdd18d39fb9eee8c62ef20d0efb5f928a88117b6fa8a9c')
+sha512sums=('edfc5f50e3126a2ef563027c2b000d60c25f5eee540fa49fb69c36a100bbc4bb3b46e1aa2b161fa93e8fee5223c95d4a7e241697cbb43044c61a60b3ce7ab1a7'
+            
'7cd2f41d0b26fce32a775043c4da2328e899f6bb8f34557e3c6f8f1d9a14ef9a218def555dabadb3e57ae501795c84c86e19172c39053b704c281277507bf181')
 
 prepare() {
   cd go-lib-$pkgver

Modified: dbus-fix.patch
===================================================================
--- dbus-fix.patch      2018-12-29 17:09:55 UTC (rev 418869)
+++ dbus-fix.patch      2018-12-29 17:11:09 UTC (rev 418870)
@@ -1,23 +1,36 @@
+From e9e0a68a7eb72da7dfa181375e6ec891be89d662 Mon Sep 17 00:00:00 2001
+From: electricface <[email protected]>
+Date: Sat, 29 Dec 2018 09:42:54 +0800
+Subject: [PATCH] fix(dbus): failed to find session bus address in systemd 240+
+
+Change-Id: I401cf471ad396003b950fc9fc038bbee0b60bc6c
+---
+
 diff --git a/dbus/conn.go b/dbus/conn.go
-index 20f65b1..01da4e3 100644
+index 20f65b1..41bb6e5 100644
 --- a/dbus/conn.go
 +++ b/dbus/conn.go
-@@ -26,6 +26,7 @@ import (
-       "reflect"
-       "strings"
-       "sync"
-+      dbus1 "pkg.deepin.io/lib/dbus1"
- )
+@@ -110,14 +110,25 @@
+       return
+ }
  
- const defaultSystemBusAddress = "unix:path=/var/run/dbus/system_bus_socket"
-@@ -112,12 +113,12 @@ func SessionBus() (conn *Conn, err error) {
- 
++func getSessionBusAddress() (string, error) {
++      if address := os.Getenv("DBUS_SESSION_BUS_ADDRESS"); address != "" && 
address != "autolaunch:" {
++              return address, nil
++
++      } else if address := tryDiscoverDbusSessionBusAddress(); address != "" {
++              os.Setenv("DBUS_SESSION_BUS_ADDRESS", address)
++              return address, nil
++      }
++      return getSessionBusPlatformAddress()
++}
++
  // SessionBusPrivate returns a new private connection to the session bus.
  func SessionBusPrivate() (*Conn, error) {
 -      address := os.Getenv("DBUS_SESSION_BUS_ADDRESS")
 -      if address != "" && address != "autolaunch:" {
 -              return Dial(address)
-+      address, err := dbus1.GetSessionBusAddress()
++      address, err := getSessionBusAddress()
 +      if err != nil {
 +              return nil, err
        }
@@ -27,18 +40,100 @@
  }
  
  // SystemBus returns a shared connection to the system bus, connecting to it 
if
-diff --git a/dbus1/conn.go b/dbus1/conn.go
-index 2737621..ac89088 100644
---- a/dbus1/conn.go
-+++ b/dbus1/conn.go
-@@ -77,6 +77,10 @@ func SessionBus() (conn *Conn, err error) {
-       return
- }
+diff --git a/dbus/conn_other.go b/dbus/conn_other.go
+index 293d8cb..d8d1adf 100644
+--- a/dbus/conn_other.go
++++ b/dbus/conn_other.go
+@@ -24,23 +24,87 @@
+ import (
+       "bytes"
+       "errors"
++      "fmt"
++      "io/ioutil"
++      "os"
+       "os/exec"
++      "os/user"
++      "path"
++      "strings"
+ )
  
-+func GetSessionBusAddress() (string, error) {
-+      return getSessionBusAddress()
+-func sessionBusPlatform() (*Conn, error) {
+-      cmd := exec.Command("/usr/bin/dbus-launch")
++func getSessionBusPlatformAddress() (string, error) {
++      cmd := exec.Command("dbus-launch")
+       b, err := cmd.CombinedOutput()
+ 
+       if err != nil {
+-              return nil, err
++              return "", err
+       }
+ 
+       i := bytes.IndexByte(b, '=')
+       j := bytes.IndexByte(b, '\n')
+ 
+       if i == -1 || j == -1 {
+-              return nil, errors.New("dbus: couldn't determine address of 
session bus")
++              return "", errors.New("dbus: couldn't determine address of 
session bus")
+       }
+ 
+-      return Dial(string(b[i+1 : j]))
++      env, addr := string(b[0:i]), string(b[i+1:j])
++      os.Setenv(env, addr)
++
++      return addr, nil
 +}
 +
- func getSessionBusAddress() (string, error) {
-       if address := os.Getenv("DBUS_SESSION_BUS_ADDRESS"); address != "" && 
address != "autolaunch:" {
-               return address, nil
++// tryDiscoverDbusSessionBusAddress tries to discover an existing dbus session
++// and return the value of its DBUS_SESSION_BUS_ADDRESS.
++// It tries different techniques employed by different operating systems,
++// returning the first valid address it finds, or an empty string.
++//
++// * /run/user/<uid>/bus           if this exists, it *is* the bus socket. 
present on
++//                                 Ubuntu 18.04
++// * /run/user/<uid>/dbus-session: if this exists, it can be parsed for the 
bus
++//                                 address. present on Ubuntu 16.04
++//
++// See https://dbus.freedesktop.org/doc/dbus-launch.1.html
++func tryDiscoverDbusSessionBusAddress() string {
++      if runtimeDirectory, err := getRuntimeDirectory(); err == nil {
++
++              if runUserBusFile := path.Join(runtimeDirectory, "bus"); 
fileExists(runUserBusFile) {
++                      // if /run/user/<uid>/bus exists, that file itself
++                      // *is* the unix socket, so return its path
++                      return fmt.Sprintf("unix:path=%s", runUserBusFile)
++              }
++              if runUserSessionDbusFile := path.Join(runtimeDirectory, 
"dbus-session"); fileExists(runUserSessionDbusFile) {
++                      // if /run/user/<uid>/dbus-session exists, it's a
++                      // text file // containing the address of the socket, 
e.g.:
++                      // 
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-E1c73yNqrG
++
++                      if f, err := ioutil.ReadFile(runUserSessionDbusFile); 
err == nil {
++                              fileContent := string(f)
++
++                              prefix := "DBUS_SESSION_BUS_ADDRESS="
++
++                              if strings.HasPrefix(fileContent, prefix) {
++                                      address := 
strings.TrimRight(strings.TrimPrefix(fileContent, prefix), "\n\r")
++                                      return address
++                              }
++                      }
++              }
++      }
++      return ""
++}
++
++func getRuntimeDirectory() (string, error) {
++      if currentUser, err := user.Current(); err != nil {
++              return "", err
++      } else {
++              return fmt.Sprintf("/run/user/%s", currentUser.Uid), nil
++      }
++}
++
++func fileExists(filename string) bool {
++      if _, err := os.Stat(filename); !os.IsNotExist(err) {
++              return true
++      } else {
++              return false
++      }
+ }

Reply via email to