[SR-2157] Extremely poor QoI with operator declared in type

Previous ID
SR-2157

Radar
None

Original Reporter
@rjmccall

Type
Bug

Additional Detail from JIRA

Votes
0

Component/s
Compiler

Labels
Bug, DiagnosticsQoI

Assignee
@DougGregor

Priority
Medium

md5: 4e4ce17f751f912aaa7e735038e95992

Issue Description:
Two problems:

massive explosion of notes about global candidates when it's much more likely that the operator declared right there is just missing a -> Bool

bizarre error about not being able to compare Ints

harza:sw:swift$ cat /tmp/red.swift
struct A : Equatable {
  private var value: Int
  init(_ value: Int) { self.value = value }

  static func ==(lhs: A, rhs: A) {
    return lhs.value == rhs.value
  }
}

harza:sw:swift$ swiftc /tmp/red.swift -parse
/tmp/red.swift:1:8: error: type 'A' does not conform to protocol 'Equatable'
struct A : Equatable {
       ^
Swift.Equatable:149:24: note: protocol requires function '==' with type '(A, A) -> Bool'; do you want to add a stub?
    public static func ==(lhs: Self, rhs: Self) -> Bool
                       ^
/tmp/red.swift:5:15: note: candidate has non-matching type '(A, A) -> ()'
  static func ==(lhs: A, rhs: A) {
              ^
Swift.==:2:13: note: candidate has non-matching type '<Element where Element : Equatable> (ContiguousArray<Element>, ContiguousArray<Element>) -> Bool' (aka '<τ_0_0 where τ_0_0 : Equatable> (ContiguousArray<τ_0_0>, ContiguousArray<τ_0_0>) -> Bool')
public func ==<Element : Equatable>(lhs: ContiguousArray<Element>, rhs: ContiguousArray<Element>) -> Bool
            ^
Swift.==:2:13: note: candidate has non-matching type '<Element where Element : Equatable> (ArraySlice<Element>, ArraySlice<Element>) -> Bool' (aka '<τ_0_0 where τ_0_0 : Equatable> (ArraySlice<τ_0_0>, ArraySlice<τ_0_0>) -> Bool')
public func ==<Element : Equatable>(lhs: ArraySlice<Element>, rhs: ArraySlice<Element>) -> Bool
            ^
Swift.==:2:13: note: candidate has non-matching type '<Element where Element : Equatable> (Array<Element>, Array<Element>) -> Bool' (aka '<τ_0_0 where τ_0_0 : Equatable> (Array<τ_0_0>, Array<τ_0_0>) -> Bool')
public func ==<Element : Equatable>(lhs: [Element], rhs: [Element]) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<Pointee> (AutoreleasingUnsafeMutablePointer<Pointee>, AutoreleasingUnsafeMutablePointer<Pointee>) -> Bool' (aka '<τ_0_0> (AutoreleasingUnsafeMutablePointer<τ_0_0>, AutoreleasingUnsafeMutablePointer<τ_0_0>) -> Bool')
public func ==<Pointee>(lhs: AutoreleasingUnsafeMutablePointer<Pointee>, rhs: AutoreleasingUnsafeMutablePointer<Pointee>) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '(Any.Type?, Any.Type?) -> Bool'
public func ==(t0: Any.Type?, t1: Any.Type?) -> Bool
            ^
Swift.==:6:13: note: candidate has non-matching type '<T where T : RawRepresentable, T.RawValue : Equatable> (T, T) -> Bool' (aka '<τ_0_0 where τ_0_0 : RawRepresentable, τ_0_0.RawValue : Equatable> (τ_0_0, τ_0_0) -> Bool')
public func ==<T : RawRepresentable where T.RawValue : Equatable>(lhs: T, rhs: T) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(UInt8, UInt8) -> Bool'
public func ==(lhs: UInt8, rhs: UInt8) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(Int8, Int8) -> Bool'
public func ==(lhs: Int8, rhs: Int8) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(UInt16, UInt16) -> Bool'
public func ==(lhs: UInt16, rhs: UInt16) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(Int16, Int16) -> Bool'
public func ==(lhs: Int16, rhs: Int16) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(UInt32, UInt32) -> Bool'
public func ==(lhs: UInt32, rhs: UInt32) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(Int32, Int32) -> Bool'
public func ==(lhs: Int32, rhs: Int32) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(UInt64, UInt64) -> Bool'
public func ==(lhs: UInt64, rhs: UInt64) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(Int64, Int64) -> Bool'
public func ==(lhs: Int64, rhs: Int64) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(UInt, UInt) -> Bool'
public func ==(lhs: UInt, rhs: UInt) -> Bool
            ^
Swift.==:5:13: note: candidate has non-matching type '(Int, Int) -> Bool'
public func ==(lhs: Int, rhs: Int) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<T where T : FloatingPoint, T.Exponent : SignedInteger, T.Exponent.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, T.Exponent.Stride : SignedNumber, T.Exponent.Stride.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, T.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, T.Magnitude : Equatable, T.Magnitude : ExpressibleByIntegerLiteral, T.Magnitude.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, T.Stride : SignedNumber, T.Stride.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral> (T, T) -> Bool' (aka '<τ_0_0 where τ_0_0 : FloatingPoint, τ_0_0.Exponent : SignedInteger, τ_0_0.Exponent.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, τ_0_0.Exponent.Stride : SignedNumber, τ_0_0.Exponent.Stride.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, τ_0_0.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, τ_0_0.Magnitude : Equatable, τ_0_0.Magnitude : ExpressibleByIntegerLiteral, τ_0_0.Magnitude.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, τ_0_0.Stride : SignedNumber, τ_0_0.Stride.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral> (τ_0_0, τ_0_0) -> Bool')
public func ==<T : FloatingPoint>(lhs: T, rhs: T) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<Value, Element> (_HeapBuffer<Value, Element>, _HeapBuffer<Value, Element>) -> Bool' (aka '<τ_0_0, τ_0_1> (_HeapBuffer<τ_0_0, τ_0_1>, _HeapBuffer<τ_0_0, τ_0_1>) -> Bool')
public func ==<Value, Element>(lhs: _HeapBuffer<Value, Element>, rhs: _HeapBuffer<Value, Element>) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<T where T : BinaryInteger, T.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, T.Magnitude : Equatable, T.Magnitude : ExpressibleByIntegerLiteral, T.Magnitude.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral> (T, T) -> Bool' (aka '<τ_0_0 where τ_0_0 : BinaryInteger, τ_0_0.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, τ_0_0.Magnitude : Equatable, τ_0_0.Magnitude : ExpressibleByIntegerLiteral, τ_0_0.Magnitude.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral> (τ_0_0, τ_0_0) -> Bool')
public func ==<T : BinaryInteger>(lhs: T, rhs: T) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<T, U where T : BinaryInteger, U : BinaryInteger, T.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, T.Magnitude : Equatable, T.Magnitude : ExpressibleByIntegerLiteral, T.Magnitude.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, U.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, U.Magnitude : Equatable, U.Magnitude : ExpressibleByIntegerLiteral, U.Magnitude.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral> (T, U) -> Bool' (aka '<τ_0_0, τ_0_1 where τ_0_0 : BinaryInteger, τ_0_1 : BinaryInteger, τ_0_0.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, τ_0_0.Magnitude : Equatable, τ_0_0.Magnitude : ExpressibleByIntegerLiteral, τ_0_0.Magnitude.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, τ_0_1.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral, τ_0_1.Magnitude : Equatable, τ_0_1.Magnitude : ExpressibleByIntegerLiteral, τ_0_1.Magnitude.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral> (τ_0_0, τ_0_1) -> Bool')
public func ==<T : BinaryInteger, U : BinaryInteger>(lhs: T, rhs: U) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<Header, Element> (ManagedBufferPointer<Header, Element>, ManagedBufferPointer<Header, Element>) -> Bool' (aka '<τ_0_0, τ_0_1> (ManagedBufferPointer<τ_0_0, τ_0_1>, ManagedBufferPointer<τ_0_0, τ_0_1>) -> Bool')
public func ==<Header, Element>(lhs: ManagedBufferPointer<Header, Element>, rhs: ManagedBufferPointer<Header, Element>) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<T where T : Equatable> (T?, T?) -> Bool' (aka '<τ_0_0 where τ_0_0 : Equatable> (Optional<τ_0_0>, Optional<τ_0_0>) -> Bool')
public func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<T> (T?, _OptionalNilComparisonType) -> Bool' (aka '<τ_0_0> (Optional<τ_0_0>, _OptionalNilComparisonType) -> Bool')
public func ==<T>(lhs: T?, rhs: _OptionalNilComparisonType) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<T> (_OptionalNilComparisonType, T?) -> Bool' (aka '<τ_0_0> (_OptionalNilComparisonType, Optional<τ_0_0>) -> Bool')
public func ==<T>(lhs: _OptionalNilComparisonType, rhs: T?) -> Bool
            ^
Swift.==:1:13: note: candidate has non-matching type '<T where T : Strideable, T.Stride : SignedNumber, T.Stride.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral> (T, T) -> Bool' (aka '<τ_0_0 where τ_0_0 : Strideable, τ_0_0.Stride : SignedNumber, τ_0_0.Stride.IntegerLiteralType : _ExpressibleByBuiltinIntegerLiteral> (τ_0_0, τ_0_0) -> Bool')
public func ==<T : Strideable>(x: T, y: T) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '<Pointee> (UnsafeMutablePointer<Pointee>, UnsafeMutablePointer<Pointee>) -> Bool' (aka '<τ_0_0> (UnsafeMutablePointer<τ_0_0>, UnsafeMutablePointer<τ_0_0>) -> Bool')
public func ==<Pointee>(lhs: UnsafeMutablePointer<Pointee>, rhs: UnsafeMutablePointer<Pointee>) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '<Pointee> (UnsafePointer<Pointee>, UnsafePointer<Pointee>) -> Bool' (aka '<τ_0_0> (UnsafePointer<τ_0_0>, UnsafePointer<τ_0_0>) -> Bool')
public func ==<Pointee>(lhs: UnsafePointer<Pointee>, rhs: UnsafePointer<Pointee>) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '(UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> Bool'
public func ==(lhs: UnsafeMutableRawPointer, rhs: UnsafeMutableRawPointer) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '(UnsafeRawPointer, UnsafeRawPointer) -> Bool'
public func ==(lhs: UnsafeRawPointer, rhs: UnsafeRawPointer) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '<A, B where A : Equatable, B : Equatable> ((A, B), (A, B)) -> Bool' (aka '<τ_0_0, τ_0_1 where τ_0_0 : Equatable, τ_0_1 : Equatable> ((τ_0_0, τ_0_1), (τ_0_0, τ_0_1)) -> Bool')
public func ==<A : Equatable, B : Equatable>(lhs: (A, B), rhs: (A, B)) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '<A, B, C where A : Equatable, B : Equatable, C : Equatable> ((A, B, C), (A, B, C)) -> Bool' (aka '<τ_0_0, τ_0_1, τ_0_2 where τ_0_0 : Equatable, τ_0_1 : Equatable, τ_0_2 : Equatable> ((τ_0_0, τ_0_1, τ_0_2), (τ_0_0, τ_0_1, τ_0_2)) -> Bool')
public func ==<A : Equatable, B : Equatable, C : Equatable>(lhs: (A, B, C), rhs: (A, B, C)) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '<A, B, C, D where A : Equatable, B : Equatable, C : Equatable, D : Equatable> ((A, B, C, D), (A, B, C, D)) -> Bool' (aka '<τ_0_0, τ_0_1, τ_0_2, τ_0_3 where τ_0_0 : Equatable, τ_0_1 : Equatable, τ_0_2 : Equatable, τ_0_3 : Equatable> ((τ_0_0, τ_0_1, τ_0_2, τ_0_3), (τ_0_0, τ_0_1, τ_0_2, τ_0_3)) -> Bool')
public func ==<A : Equatable, B : Equatable, C : Equatable, D : Equatable>(lhs: (A, B, C, D), rhs: (A, B, C, D)) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '<A, B, C, D, E where A : Equatable, B : Equatable, C : Equatable, D : Equatable, E : Equatable> ((A, B, C, D, E), (A, B, C, D, E)) -> Bool' (aka '<τ_0_0, τ_0_1, τ_0_2, τ_0_3, τ_0_4 where τ_0_0 : Equatable, τ_0_1 : Equatable, τ_0_2 : Equatable, τ_0_3 : Equatable, τ_0_4 : Equatable> ((τ_0_0, τ_0_1, τ_0_2, τ_0_3, τ_0_4), (τ_0_0, τ_0_1, τ_0_2, τ_0_3, τ_0_4)) -> Bool')
public func ==<A : Equatable, B : Equatable, C : Equatable, D : Equatable, E : Equatable>(lhs: (A, B, C, D, E), rhs: (A, B, C, D, E)) -> Bool
            ^
Swift.==:3:13: note: candidate has non-matching type '<A, B, C, D, E, F where A : Equatable, B : Equatable, C : Equatable, D : Equatable, E : Equatable, F : Equatable> ((A, B, C, D, E, F), (A, B, C, D, E, F)) -> Bool' (aka '<τ_0_0, τ_0_1, τ_0_2, τ_0_3, τ_0_4, τ_0_5 where τ_0_0 : Equatable, τ_0_1 : Equatable, τ_0_2 : Equatable, τ_0_3 : Equatable, τ_0_4 : Equatable, τ_0_5 : Equatable> ((τ_0_0, τ_0_1, τ_0_2, τ_0_3, τ_0_4, τ_0_5), (τ_0_0, τ_0_1, τ_0_2, τ_0_3, τ_0_4, τ_0_5)) -> Bool')
public func ==<A : Equatable, B : Equatable, C : Equatable, D : Equatable, E : Equatable, F : Equatable>(lhs: (A, B, C, D, E, F), rhs: (A, B, C, D, E, F)) -> Bool
            ^
Swift.Bool:11:24: note: candidate has non-matching type '(Bool, Bool) -> Bool'
    public static func ==(lhs: Bool, rhs: Bool) -> Bool
                       ^
Swift.Character:2:24: note: candidate has non-matching type '(Character, Character) -> Bool'
    public static func ==(lhs: Character, rhs: Character) -> Bool
                       ^
Swift.ClosedRangeIndex<Bound>:2:24: note: candidate has non-matching type '<Bound> (ClosedRangeIndex<Bound>, ClosedRangeIndex<Bound>) -> Bool' (aka '<τ_0_0> (ClosedRangeIndex<τ_0_0>, ClosedRangeIndex<τ_0_0>) -> Bool')
    public static func ==(lhs: ClosedRangeIndex<Bound>, rhs: ClosedRangeIndex<Bound>) -> Bool
                       ^
Swift.OpaquePointer:2:24: note: candidate has non-matching type '(OpaquePointer, OpaquePointer) -> Bool'
    public static func ==(lhs: OpaquePointer, rhs: OpaquePointer) -> Bool
                       ^
Swift.EmptyCollection<Element>:2:24: note: candidate has non-matching type '<Element> (EmptyCollection<Element>, EmptyCollection<Element>) -> Bool' (aka '<τ_0_0> (EmptyCollection<τ_0_0>, EmptyCollection<τ_0_0>) -> Bool')
    public static func ==(lhs: EmptyCollection<Element>, rhs: EmptyCollection<Element>) -> Bool
                       ^
Swift.LazyFilterIndex<Base>:2:24: note: candidate has non-matching type '<Base> (LazyFilterIndex<Base>, LazyFilterIndex<Base>) -> Bool' (aka '<τ_0_0> (LazyFilterIndex<τ_0_0>, LazyFilterIndex<τ_0_0>) -> Bool')
    public static func ==(lhs: LazyFilterIndex<Base>, rhs: LazyFilterIndex<Base>) -> Bool
                       ^
Swift.FlattenCollectionIndex<BaseElements>:2:24: note: candidate has non-matching type '<BaseElements> (FlattenCollectionIndex<BaseElements>, FlattenCollectionIndex<BaseElements>) -> Bool' (aka '<τ_0_0> (FlattenCollectionIndex<τ_0_0>, FlattenCollectionIndex<τ_0_0>) -> Bool')
    public static func ==(lhs: FlattenCollectionIndex<BaseElements>, rhs: FlattenCollectionIndex<BaseElements>) -> Bool
                       ^
Swift.FlattenBidirectionalCollectionIndex<BaseElements>:2:24: note: candidate has non-matching type '<BaseElements> (FlattenBidirectionalCollectionIndex<BaseElements>, FlattenBidirectionalCollectionIndex<BaseElements>) -> Bool' (aka '<τ_0_0> (FlattenBidirectionalCollectionIndex<τ_0_0>, FlattenBidirectionalCollectionIndex<τ_0_0>) -> Bool')
    public static func ==(lhs: FlattenBidirectionalCollectionIndex<BaseElements>, rhs: FlattenBidirectionalCollectionIndex<BaseElements>) -> Bool
                       ^
Swift.FloatingPointClassification:13:30: note: candidate has non-matching type '(FloatingPointClassification, FloatingPointClassification) -> Bool'
    infix public static func ==(a: FloatingPointClassification, b: FloatingPointClassification) -> Bool
                             ^
Swift.FloatingPointRoundingRule:22:30: note: candidate has non-matching type '(FloatingPointRoundingRule, FloatingPointRoundingRule) -> Bool'
    infix public static func ==(a: FloatingPointRoundingRule, b: FloatingPointRoundingRule) -> Bool
                             ^
Swift.Set<Element>:9:24: note: candidate has non-matching type '<Element> (Set<Element>, Set<Element>) -> Bool' (aka '<τ_0_0> (Set<τ_0_0>, Set<τ_0_0>) -> Bool')
    public static func ==(lhs: Set<Element>, rhs: Set<Element>) -> Bool
                       ^
Swift.Dictionary<Key, Value>:2:24: note: candidate has non-matching type '<Key, Value> ([Key : Value], [Key : Value]) -> Bool' (aka '<τ_0_0, τ_0_1> (Dictionary<τ_0_0, τ_0_1>, Dictionary<τ_0_0, τ_0_1>) -> Bool')
    public static func ==(lhs: [Key : Value], rhs: [Key : Value]) -> Bool
                       ^
Swift.SetIndex<Element>:2:24: note: candidate has non-matching type '<Element> (SetIndex<Element>, SetIndex<Element>) -> Bool' (aka '<τ_0_0> (SetIndex<τ_0_0>, SetIndex<τ_0_0>) -> Bool')
    public static func ==(lhs: SetIndex<Element>, rhs: SetIndex<Element>) -> Bool
                       ^
Swift.DictionaryIndex<Key, Value>:2:24: note: candidate has non-matching type '<Key, Value> (DictionaryIndex<Key, Value>, DictionaryIndex<Key, Value>) -> Bool' (aka '<τ_0_0, τ_0_1> (DictionaryIndex<τ_0_0, τ_0_1>, DictionaryIndex<τ_0_0, τ_0_1>) -> Bool')
    public static func ==(lhs: DictionaryIndex<Key, Value>, rhs: DictionaryIndex<Key, Value>) -> Bool
                       ^
Swift.ArithmeticOverflow:5:30: note: candidate has non-matching type '(ArithmeticOverflow, ArithmeticOverflow) -> Bool'
    infix public static func ==(a: ArithmeticOverflow, b: ArithmeticOverflow) -> Bool
                             ^
Swift.Range<Bound>:2:24: note: candidate has non-matching type '<Bound> (Range<Bound>, Range<Bound>) -> Bool' (aka '<τ_0_0> (Range<τ_0_0>, Range<τ_0_0>) -> Bool')
    public static func ==(lhs: Range<Bound>, rhs: Range<Bound>) -> Bool
                       ^
Swift.CountableRange<Bound>:2:24: note: candidate has non-matching type '<Bound> (CountableRange<Bound>, CountableRange<Bound>) -> Bool' (aka '<τ_0_0> (CountableRange<τ_0_0>, CountableRange<τ_0_0>) -> Bool')
    public static func ==(lhs: CountableRange<Bound>, rhs: CountableRange<Bound>) -> Bool
                       ^
Swift.ClosedRange<Bound>:2:24: note: candidate has non-matching type '<Bound> (ClosedRange<Bound>, ClosedRange<Bound>) -> Bool' (aka '<τ_0_0> (ClosedRange<τ_0_0>, ClosedRange<τ_0_0>) -> Bool')
    public static func ==(lhs: ClosedRange<Bound>, rhs: ClosedRange<Bound>) -> Bool
                       ^
Swift.CountableClosedRange<Bound>:2:24: note: candidate has non-matching type '<Bound> (CountableClosedRange<Bound>, CountableClosedRange<Bound>) -> Bool' (aka '<τ_0_0> (CountableClosedRange<τ_0_0>, CountableClosedRange<τ_0_0>) -> Bool')
    public static func ==(lhs: CountableClosedRange<Bound>, rhs: CountableClosedRange<Bound>) -> Bool
                       ^
Swift.ObjectIdentifier:3:24: note: candidate has non-matching type '(ObjectIdentifier, ObjectIdentifier) -> Bool'
    public static func ==(x: ObjectIdentifier, y: ObjectIdentifier) -> Bool
                       ^
Swift._MirrorDisposition:25:30: note: candidate has non-matching type '(_MirrorDisposition, _MirrorDisposition) -> Bool'
    infix public static func ==(a: _MirrorDisposition, b: _MirrorDisposition) -> Bool
                             ^
Swift.ReversedIndex:7:24: note: candidate has non-matching type '<Base> (ReversedIndex<Base>, ReversedIndex<Base>) -> Bool' (aka '<τ_0_0> (ReversedIndex<τ_0_0>, ReversedIndex<τ_0_0>) -> Bool')
    public static func ==(lhs: ReversedIndex<Base>, rhs: ReversedIndex<Base>) -> Bool
                       ^
Swift.ReversedRandomAccessIndex:7:24: note: candidate has non-matching type '<Base> (ReversedRandomAccessIndex<Base>, ReversedRandomAccessIndex<Base>) -> Bool' (aka '<τ_0_0> (ReversedRandomAccessIndex<τ_0_0>, ReversedRandomAccessIndex<τ_0_0>) -> Bool')
    public static func ==(lhs: ReversedRandomAccessIndex<Base>, rhs: ReversedRandomAccessIndex<Base>) -> Bool
                       ^
Swift.String:2:24: note: candidate has non-matching type '(String, String) -> Bool'
    public static func ==(lhs: String, rhs: String) -> Bool
                       ^
Swift.Index:2:24: note: candidate has non-matching type '(Index, Index) -> Bool'
    public static func ==(lhs: Index, rhs: Index) -> Bool
                       ^
Swift.String.UnicodeScalarView.Index:2:24: note: candidate has non-matching type '(String.UnicodeScalarView.Index, String.UnicodeScalarView.Index) -> Bool'
    public static func ==(lhs: String.UnicodeScalarView.Index, rhs: String.UnicodeScalarView.Index) -> Bool
                       ^
Swift.String.UTF16View.Index:2:24: note: candidate has non-matching type '(String.UTF16View.Index, String.UTF16View.Index) -> Bool'
    public static func ==(lhs: String.UTF16View.Index, rhs: String.UTF16View.Index) -> Bool
                       ^
Swift.String.UTF8View.Index:2:24: note: candidate has non-matching type '(String.UTF8View.Index, String.UTF8View.Index) -> Bool'
    public static func ==(lhs: String.UTF8View.Index, rhs: String.UTF8View.Index) -> Bool
                       ^
Swift.UnicodeDecodingResult:15:24: note: candidate has non-matching type '(UnicodeDecodingResult, UnicodeDecodingResult) -> Bool'
    public static func ==(lhs: UnicodeDecodingResult, rhs: UnicodeDecodingResult) -> Bool
                       ^
Swift.UnicodeScalar:2:24: note: candidate has non-matching type '(UnicodeScalar, UnicodeScalar) -> Bool'
    public static func ==(lhs: UnicodeScalar, rhs: UnicodeScalar) -> Bool
                       ^
Swift._SwiftNSOperatingSystemVersion:2:24: note: candidate has non-matching type '(_SwiftNSOperatingSystemVersion, _SwiftNSOperatingSystemVersion) -> Bool'
    public static func ==(lhs: _SwiftNSOperatingSystemVersion, rhs: _SwiftNSOperatingSystemVersion) -> Bool
                       ^
Swift.AnyIndex:6:24: note: candidate has non-matching type '(AnyIndex, AnyIndex) -> Bool'
    public static func ==(lhs: AnyIndex, rhs: AnyIndex) -> Bool
                       ^
Swift.Mirror:95:34: note: candidate has non-matching type '(Mirror.DisplayStyle, Mirror.DisplayStyle) -> Bool'
        infix public static func ==(a: Mirror.DisplayStyle, b: Mirror.DisplayStyle) -> Bool
                                 ^
/tmp/red.swift:6:22: error: binary operator '==' cannot be applied to two 'Int' operands
    return lhs.value == rhs.value
           ~~~~~~~~~ ^  ~~~~~~~~~
/tmp/red.swift:6:22: note: expected an argument list of type '(A, A)'
    return lhs.value == rhs.value
                     ^

The candidate list is more focused are and the bogus '==' cannot be applied is gone now, but we could still do a lot better by at least saying that the provided == would match if the result type was Bool.
You now have to suppress Equatable synthesis to reproduce this though:
struct A : Equatable {
  let value: Int
  let suppressSynthesizedEquatable: Any

  static func ==(lhs: A, rhs: A) {
    return lhs.value == rhs.value
  }
}


[#3064] feat(jdbc-doris): Supports partition management in Doris catalog

What changes were proposed in this pull request?
Supports partition management in Doris catalog.
Why are the changes needed?
Fix: #3064
Does this PR introduce any user-facing change?
No.
How was this patch tested?
UT & IT.

@mchades
Could you please help to view it?

@mchades, issues above should have been solved, could you help review this again? Thx.


BroadLink SP Mini Wi-Fi switch and BroadLinkRM Mini 3

Every time I tried to use learn toggle switch on my iPhone, I would get following error.
Discovered Broadlink RM device at <IP_ADDRESS> (37:27:04:01:a8:c0)
/usr/local/lib/node_modules/homebridge-broadlink-rm/helpers/learnData.js:59
  device.enterLearning()
         ^

TypeError: device.enterLearning is not a function
    at Object.start (/usr/local/lib/node_modules/homebridge-broadlink-rm/helpers/learnData.js:59:10)
    at LearnIRAccessory.toggleLearning (/usr/local/lib/node_modules/homebridge-broadlink-rm/accessories/learnIR.js:19:17)
    at emitMany (events.js:127:13)
    at emit (events.js:201:7)
    at Characteristic.setValue (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Characteristic.js:155:10)
    at Bridge.<anonymous> (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:740:22)
    at Array.forEach (native)
    at Bridge.Accessory._handleSetCharacteristics (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:685:8)
    at emitMany (events.js:127:13)
    at HAPServer.emit (events.js:201:7)

I just noticed this plugin was picking up 2 of my BroadLink SP Mini Wi-Fi switch as well as BroadLinkRM Mini 3. The mac address for all 3 were incorrect but IP address was correct.
For example:
Discovered Broadlink RM device at <IP_ADDRESS> (37:27:04:01:a8:c0)
So, I turned off both of BroadLink SP Mini Wi-Fi switch, this plugin works. Looks like I found the root cause of the above conflict. It might be helpful for others. Let me know if you want me troubleshoot anything.
I was also wondering, can you control BroadLink SP Mini Wi-Fi with your plugin?

Hey - thanks for reporting this. I don't have any other devices but the Broadlink RM to it's useful to get these kind of reports.
I've fixed the issue you were seeing in 1.0.4 so you can have all the devices on the network.
If you were able to get the decrypted hex codes for the BroadLink SP Mini Wi-Fi with as packet sniffer  like Wireshark (for IR/RF we normally get through the Learn IR function) then I don't see why you wouldn't be able to use them.
You could tweak broadlinkjs to pass the encrypted hex code through to get the decrypted one back.

Thanks! It's all good now.
I wouldn't have a clue where to begin with Wireshark...

I just got this error when I asked to turn on a device. I can't seem to replicate this issue.
[3/30/2017, 4:26:09 PM] [Broadlink RM] setSwitchState: true
/usr/local/lib/node_modules/homebridge-broadlink-rm/helpers/sendData.js:31
device.sendData(packet);
^
TypeError: device.sendData is not a function
at module.exports (/usr/local/lib/node_modules/homebridge-broadlink-rm/helpers/sendData.js:31:10)
at SwitchAccessory.setSwitchState (/usr/local/lib/node_modules/homebridge-broadlink-rm/accessories/switch.js:21:5)
at emitMany (events.js:127:13)
at emit (events.js:201:7)
at Characteristic.setValue (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Characteristic.js:155:10)
at Bridge. (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:740:22)
at Array.forEach (native)
at Bridge.Accessory._handleSetCharacteristics (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:685:8)
at emitMany (events.js:127:13)
at HAPServer.emit (events.js:201:7)

I assume that's with your SP switches? Looking at broadlinkjs it appears SP's works differently.
I can add support for them but it won't be until next week.

Also, make sure you're setting the host value for each accessory given that you have multiple broadlink devices.

Sounds good! That would be great!
Personally, I'm looking to ditch SP plugs as I got Xiaomi one's now :) Just waiting for new cables as Xiaomi requires earth for AU cables whereas Broadlink doesn't.
But it I might be helpful for others?
You've a great plugin here. I hope apple will update Home to accomodate better UI for remote control.

You don’t like grounding? :)
It’d at least be good for me to check whether the device is capable of receiving RF/IR rather than crashing.
We should hopefully find out about new UI in June with WWDC.
On 30 Mar 2017, 4:52 PM +1100, astrojetson8<EMAIL_ADDRESS>wrote:

Sounds good! That would be great!
Personally, I'm looking to ditch SP plugs as I got Xiaomi one's now :) Just waiting for new cables as Xiaomi requires earth for AU cables whereas Broadlink doesn't.
But it I might be helpful for others?
You've a great plugin here. I hope apple will update Home to accomodate better UI for remote control.
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub, or mute the thread.

as far as i could find, there's no 3 pin for 8 figure cable so I end up getting US 8 figure cable.

I've added a check to 1.0.4 so that it doesn't crash.

@astrojetson8 MAC address has been fixed in 1.1.19 (check out the release notes if it doesn't work)
Hopefully it's correct for all three of your devices, otherwise it may be different for each type of device.


Fixed 'Cannot read properties of null (reading 'readyState')'

Fixed error in index.js file line 49

Thanks @Fahad-ishfaq


Quality Assurance - link in Settings does not open

Reproduction:

Navigate to Settings->Notifications
Under Stream messages, there is the phrase

Change notification settings for individual streams on your Streams page.

Click on Streams page.
You would expect to be redirected to "https://chat.zulip.org/#subscriptions". This link is also set in the browser address bar, but not opened. Instead, the Settings windows remains dominant.

@brockwhittaker this bug is a nice find in the new settings page UI :)

Great thanks @derAnfaenger! I know what the cause is and I'll submit a fix now. :)

This was fixed like a month ago.


fix ugly message when target jvm dies

if heapSpank is plugged into a process that is killed, you will see an error message like this:
Error executing HotSpotVirtualMachine.heapHist() for pid [10402] at time [1483212282896] java.lang.reflect.InvocationTargetException com.github.eostermueller.heapspank.leakyspank.tools.JMapHistoException Cause:null java.lang.reflect.InvocationTargetException Error executing HotSpotVirtualMachine.heapHist() for pid [10402] at time [1483212287894] java.lang.reflect.InvocationTargetException
Need to have a cleaner response and display a message like "process 10402 has been terminated"  and then perhaps do a System.exit(-1); to terminate heapSpank.

When v0.8 is released, the following msg will display and heapSpank will exit when the target application is no longer available:
================================================================ Process ID [3301] died at [Tuesday, January 3, 2017 5:21:52 PM CST! #~/Documents/src/jsource/jmaphisto/JMapHisto:


Problem with Custom Filter

I noticed an issue with the custom filter syntax not being correct with the Laratrust module.
<?php

namespace MyApp;

use JeroenNoten\LaravelAdminLte\Menu\Builder;
use JeroenNoten\LaravelAdminLte\Menu\Filters\FilterInterface;
use Laratrust;

class MyMenuFilter implements FilterInterface
{
    public function transform($item, Builder $builder)
    {
        if (isset($item['permission'] && Laratrust::can($item['permission'])) {
            return false;
        }

        if (isset($item['header'])) {
            $item = $item['header'];
        }

        return $item;
    }
}

needs to be
<?php

namespace MyApp;

use JeroenNoten\LaravelAdminLte\Menu\Builder;
use JeroenNoten\LaravelAdminLte\Menu\Filters\FilterInterface;
use Laratrust;

class MyMenuFilter implements FilterInterface
{
    public function transform($item, Builder $builder)
    {
        if (isset($item['permission']) && !Laratrust::can($item['permission'])) {
            return false;
        }

        if (isset($item['header'])) {
            $item = $item['header'];
        }

        return $item;
    }
}

You're right. Fixed.
Thanks! 👍

Don't forget the right parentheses after the first isset as described in
three ticket.
Daryl
On Feb 14, 2017 9:09 AM, "Jeroen Noten"<EMAIL_ADDRESS>wrote:

You're right. Fixed.
Thanks! 👍
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/jeroennoten/Laravel-AdminLTE/issues/57#issuecomment-279716258,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AHCQD13VrPq_YzRPW4AfidXdaKlI_eoGks5rcbWOgaJpZM4L_Ooy
.

Thanks ;-)

Pls help me to implement with jeroennoen laravel roles.

help me to implement with jeroannoten auth guard

Thank You , Sir
Jum, 13 Jan 2023 pukul 19.45 Roberto Lyra @.***>
menulis:

on the documentation it is missing that you also have to define the model
on the config/adminlte.php
[
'text' => 'admin',
'url' => 'admin',
'model' => 'Role',
'can' => 'admin',
'icon' => 'far fa-fw fa-file',
],
if you look into the source code there''s a model object on the
GateFilter.php that has to be defined.
All the best from Brazil.
—
Reply to this email directly, view it on GitHub
https://github.com/jeroennoten/Laravel-AdminLTE/issues/57#issuecomment-1381802719,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOZWJFKWRF766FMNS6FMNJLWSFE65ANCNFSM4C745IZA
.
You are receiving this because you commented.Message ID:
@.***>

After implementing Spatie with Admin Lte it seems that it also works by seeting up the adminlte.php with ( I am still testing it) :
[
'text' => 'blog2',
'url'  => 'admin/blog',
'role'  => 'writer',
],
it is important that the User model is defined with the spatie trait HasRoles

Thank You , Sir Jum, 13 Jan 2023 pukul 19.45 Roberto Lyra @.> menulis:
…
on the documentation it is missing that you also have to define the model on the config/adminlte.php [ 'text' => 'admin', 'url' => 'admin', 'model' => 'Role', 'can' => 'admin', 'icon' => 'far fa-fw fa-file', ], if you look into the source code there''s a model object on the GateFilter.php that has to be defined. All the best from Brazil. — Reply to this email directly, view it on GitHub <#57 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOZWJFKWRF766FMNS6FMNJLWSFE65ANCNFSM4C745IZA . You are receiving this because you commented.Message ID: @.>

Best solution I could find so far is to adjust the EventServiceProvider.php (Note that the hasRole is from the Spatie package)
public function boot()
{
Event::listen(BuildingMenu::class, function (BuildingMenu $event) {
// Add some items to the menu...
$event->menu->add('MAIN NAVIGATION');
if(Auth::user()->hasRole('admin'))
{
$event->menu->add([
'text' => 'Blog',
'url' => 'admin/blog',
]);
}
    });
}


Edward interface not starting

Hi,
when running the phoenics.recommend() method, a FileNotFoundError occurs. The file ./.sctratch/sampling_results.pkl is not found which means that the edwards_interface.py has not produced it. I tried to change backend to tensorflow but there is a problem with tenosrflow_probability (version 0.9.0) I do not know which version fits to tensorflow 1.4.0 or 1.4.1
This is the traceback:

FileNotFoundError                         Traceback (most recent call last)
 in
----> 1 params = phoenics.recommend(observations = observations)
2 print (params)
/usr/local/lib/python3.6/dist-packages/phoenics/phoenics.py in recommend(self, observations, as_array)
99                         obs_params, obs_objs = self.obs_processor.process(observations)
100
--> 101                         self.bayesian_network.sample(obs_params, obs_objs)
102                         self.bayesian_network.build_kernels()
103                         sampling_param_values   = self.bayesian_network.sampling_param_values
/usr/local/lib/python3.6/dist-packages/phoenics/BayesianNetwork/bayesian_network.py in sample(self, obs_params, obs_objs, num_epochs)
101
102                 # pick up
--> 103                 with open(results_file, 'rb') as content:
104                         results_dict = pickle.loads(content.read())
105                 self.trace_kernels = results_dict['trace_kernels']
FileNotFoundError: [Errno 2] No such file or directory: './.scratch/sampling_results.pkl'

Dear larryluer,
Thank you for your message and for reaching out.
I tried to reproduce the error you reported but I could not reproduce it. Can you please describe how you set up the environment, and detail the step-by-step procedure you followed for the installation of Phoenics?
The steps I executed are the following:
git clone https://github.com/ChemOS-Inc/phoenics.git
cd phoenics
python3.6 -m venv venv # virtual environment created with Python3.6
source venv/bin/activate
pip install -r requirements.txt
python setup.py install #or 'pip install phoenics' if you don't need to edit the source code
pip install edward==1.3.5
pip install tensorflow==1.4.1
cd examples/optimization_sequential
python optimize_branin.py

Note that with this fresh installation I can run the example provided in the repository.
Also, please note that the edward backend requires Python 3.6 and will not work with Python 3.7.
Looking forward to your response.
Cheers,
Roberto

Dear Roberto,
I followed your strategy, and it works. Thank you! One more question: How do I control the number of parameter sets per batch? The general setting "boosted" expects a Boolean, not an Integer.
Thanks again!
Larry

Dear Larry,
Excellent! I am glad it is working. Thank you for using this software.
To control the number of generated parameters per batch, please tune the option batches in the section general of the config.json file.
Please find below an example:
{
	"general": {
		"batches": 2,
		"parallel": true,
		"boosted":  false,
		"backend": "edward"
	},
	"parameters": [
		{"name": "x", "type": "continuous", "low": -5.0, "high": 10.0, "size": 1},
		{"name": "y", "type": "continuous", "low":  0.0, "high": 15.0, "size": 1}
	],
	"objectives": [
		{"name": "branin", "goal": "minimize"}
	]
}

With this aforementioned config.json, Phoenics generates two pairs of parameters, with one parameter biased towards exploration and the other towards exploitation per pair.
Please note that by default batches is set to 1, and, thus, Pheonics generates only one pair of parameters.
Regarding boosted, you are correct: it expects a Boolean and not an Integer.
I hope this answers your questions.
Thank you again for using Phoenics!
Cheers,
Roberto

Thanks for the explanation. However, I need one batch with more then two predictions. I would like to control the number of parameters per batch so that lambda is varied from -1 to 1 in smaller steps. In the earlier version (from aspuru guzik github), there was the parameter "batch_size". Setting this to 5, gave predictions for lambda = [-1, -0.5, 0, 0.5, 1]. In the new version, this setting has no effect. Setting "batches" to 6 always yields 12 predictions, no matter how I set "batch_size", and I cannot associate them with a corresponding lambda value to know which one is for exploration and which one for exploitation.
Thanks very much for your help!
Larry

Dear Larry,
In order to change the number of predictions per batch you need to use the sampling_strategies option. The default value is 2.
I hope this answers your questions.
Cheers,
Roberto

Great, it works perfectly. Many thanks!
Larry


Looks like you changed the folder structure, which broke links In Power Automate documentation

Describe the bug
Broken links in Power Automate docs due to folder changes in this repo.
To Reproduce
Click on links references this repo on this page - https://docs.microsoft.com/en-us/connectors/facebook/
Expected behavior
You may want to check with Docs team to figure out how impactful this is across all Power Platform docs.
Environment summary
Install Method (e.g. pip, interactive script, apt-get, Docker, MSI, edge build) / CLI version (paconn --version) / OS version / Shell Type (e.g. bash, cmd.exe, Bash on Windows)
Additional context
Add any other context about the problem here.

Hey @pzerger - thanks for flagging this. From what I can find this seems to be the only instance of impact. We'll make an item to get this addressed.

@pzerger I've put in the change to fix the link in the Facebook documentation. That'll go out with the next deployment cycle in a few business days. I'll go ahead and consider this resolved, and close the issue accordingly.
Thanks again for flagging!


ci: add workflow for running renovate

:tada: This PR is included in version 1.1.1 :tada:
The release is available on:

GitHub release
v1.1.1

Your semantic-release bot :package::rocket:


Add: Rotate String

Codecov Report

Merging #472 into master will decrease coverage by 0.12%.
The diff coverage is 60%.

@@            Coverage Diff             @@
##           master     #472      +/-   ##
==========================================
- Coverage     100%   99.87%   -0.13%
==========================================
  Files         161      162       +1
  Lines        1599     1604       +5
==========================================
+ Hits         1599     1602       +3
- Misses          0        1       +1
- Partials        0        1       +1

Impacted Files
Coverage Δ

problems/rotate-string/rotate_string.go
60% <60%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 9072299...3287007. Read the comment docs.


Rewrote plugin. See README.md for more info.

Update to Apache Server Configs v2.14.0
Rewrote plugin as a class
Rewrote logic so that server and WordPress configurations are only
checked when plugin is actively in use
Added filters to provide users with more control over the rules that are
being applied
Added a dedicated WordPress section to the bottom of h5bp-htaccess

This closes the other two issues, by the way.

Done.

:+1: assuming it works!

I've tested in a Bedrock environment and I just tested it in a traditional WordPress environment. Worked for me on both of those. I also tested all of the examples I used in README.md.
Everything checks out on my end.


feat: multi hop trade ui architechtural cleanup

Description

Pull Request Type

[ ] :bug: Bug fix (Non-breaking Change: Fixes an issue)
[ ] :hammer_and_wrench: Chore (Non-breaking Change: Doc updates, pkg upgrades, typos, etc..)
[ ] :nail_care: New Feature (Breaking/Non-breaking Change)

Issue (if applicable)

closes #
Risk

Testing

Engineering

Operations

Screenshots (if applicable)

Current dependencies on/for this PR:

develop

PR #5587

PR #5596

PR #5599

PR #5607

PR #5611

PR #5612

PR #5616

PR #5623   👈

This stack of pull requests is managed by Graphite.


Fix operator resolution involving generics and supertypes

For a hypothetical operator defined as
OperatorB : (T, System.Integer) -> T

the following should hold:

When passed in (System.Boolean, System.Any), OperatorB should resolve with the (System.Boolean, System.Integer) -> System.Boolean signature.
When passed in (System.Boolean, System.Integer) later during translation, OperatorB should resolve with the (System.Boolean, System.Integer) -> System.Boolean signature. Previous resolution involving System.Any must not affect this resolution.
When passed in (FHIR.Quantity, System.Integer), OperatorB should resolve with the (FHIR.Quantity, System.Integer) -> FHIR.Quantity signature.
When later passed in (FHIR.Distance, System.Integer), OperatorB should resolve with the (FHIR.Distance, System.Integer) -> FHIR.Distance signature. Previous instantiation of (FHIR.Quantity, System.Integer) with a supertype for OperatorB must not affect this resolution.

Closing in favor of https://github.com/cqframework/clinical_quality_language/pull/1426 and https://github.com/cqframework/clinical_quality_language/pull/1428


failed to generate

Version
3.1.0 (ef39513)
Seed
R730-T6PG-ZJHH0HQZ9Y000QQCRAW431000000000RZZZZZZZZZZ
Scenario
RE 1 (Chris)
Player Character
Chirs
What happened?
when i try to generatin the seed it show me error message that saying an error occured during generation Please report this seed and try another

I am unable to reproduce this issue, are you able to send me the log files?

log_pl0.txt
I was wrong for the game that gives me a problem it's resident evil 3 when I try to create the seed

This is likely caused by a slightly different version of the game, or unwated files in your RE 3 install directory. The next release will have a potential solution to this.


Docs: small typo

Playing around with Threlte again after a long break, loving how far this has come ❤ you guys are awesome!

Thanks a lot @lega0208, good catch!


eval: add a test for a missing import

Just what it says on the tin. Ensures that evaluation does not panic in the case of a missing import.

(confirmed that the new test fails w/o the recent changes we made to avoid panics)


[error extensibility] Allow template's owner to enhance known errors

As a template owner, I want to add more information to errors which I know about.
For example, if my template depends on setting up some specific configuration for my subscription and I know what is the error returned by Azure when this configuration is missing, but the error is not clear to be understood by users, I want to define more notes for the error and make azd to bring this notes when the error is found in the output.
Here a simple proposal:

Enhancing known errors per template
o	Use a section within azure.yaml to define/describe the output errors that are known by the azd-template owner.
o	Extend the error by adding more description to help users to deal/understand the error.
o	When azd runs, it loads the list and when errors occur, it displays the extended notes if the error is within the list.

I do think that this an issue but I think expecting the template authors to know about Azure issues and handle them is probably not quite the right mindset. I think we should potential explore this more holistically.

While this is certainly a good thing to have, I would encourage us to primarily focus on perhaps getting azd to:

Return actionable errors regardless of the situation
Add functionality to support the different use cases where users need to bootstrap additional things before actually running azd

And secondarily, for template authors to be clear on documenting the required setup steps up-front in the readme. A corollary from the azd improvements is that the author can avoid custom scripts and instead reference useful azd commands that help with the required setup process.

Moving to Backlog.


Not running

I don't know what else to write, plugin is installed, librarian-puppet install works when run by hand, and all vagrant reload --provision, vagrant reload and vagrant provision, nothing seems to work.
The paths in the Vagrantfile are correct (as far as I can see) and the plugin is force-installed in the top of the Vagrantfile using
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

PUPPET_PATH = File.expand_path("../../../..")

required_plugins = %w( vagrant-librarian-puppet vagrant-vbguest )
required_plugins.each do |plugin|
    system "vagrant plugin install #{plugin}" unless Vagrant.has_plugin? plugin
end

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  # All Vagrant configuration is done here. The most common configuration
  # options are documented and commented below. For a complete reference,
  # please see the online documentation at vagrantup.com.

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "puppetlabs/centos-7.0-64-puppet"

Where do I start to diagnose to give you a real bug report ?

It would help to see the section in the Vagrantfile where you configure the plugin.
Also, an overview of your directory structure as well.

Indeed, here it is, and an ls -l of the relative myproject_path
# -*- mode: ruby -*-
# vi: set ft=ruby :

# vagrantfile api/syntax version. don't touch unless you know what you're doing!
vagrantfile_api_version = "2"

myproject_path = file.expand_path("../../../..")

required_plugins = %w( vagrant-librarian-puppet vagrant-vbguest )
required_plugins.each do |plugin|
    system "vagrant plugin install #{plugin}" unless vagrant.has_plugin? plugin
end

vagrant.configure(vagrantfile_api_version) do |config|

  # all vagrant configuration is done here. the most common configuration
  # options are documented and commented below. for a complete reference,
  # please see the online documentation at vagrantup.com.

  # every vagrant virtual environment requires a box to build off of.
  config.vm.box = "puppetlabs/centos-7.0-64-puppet"

  # the url from where the 'config.vm.box' box will be fetched if it
  # doesn't already exist on the user's system.
  # config.vm.box_url = "https://s3.amazonaws.com/boxes.myproject.io/myproject-debian_64.box"

  # create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. in the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # config.vm.network :forwarded_port, guest: 80, host: 8080

  # create a private network, which allows host-only access to the machine
  # using a specific ip.
  # config.vm.network :private_network, ip: "<IP_ADDRESS>"

  # create a public network, which generally matched to bridged network.
  # bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network :public_network
   config.vm.network "private_network", ip: "<IP_ADDRESS>"

  # if true, then any ssh connections made will enable agent forwarding.
  # default value: false
  # config.ssh.forward_agent = true

  # share an additional folder to the guest vm. the first argument is
  # the path on the host to the actual folder. the second argument is
  # the path on the guest to mount the folder. and the optional third
  # argument is a set of non-required options.
  config.vm.synced_folder myproject_path, "/myproject"
  config.vm.synced_folder "#{myproject_path}/keys", "/var/lib/puppet/keys"

  # provider-specific configuration so you can fine-tune various
  # backing providers for vagrant. these expose provider-specific options.
  # example for virtualbox:
  #
  # config.vm.provider :virtualbox do |vb|
  #   # don't boot with headless mode
  #   vb.gui = true
  #
  #   # use vboxmanage to customize the vm. for example to change memory:
  #   vb.customize ["modifyvm", :id, "--memory", "1024"]
  # end
  #
  # view the documentation for the provider you're using for more
  # information on available options.

  config.vm.provider :virtualbox do |v|
    # io-apic needed for 64bit support, and also appearently for smp support, see: http://www.virtualbox.org/manual/ch03.html#intro-64bitguests
    v.customize ["modifyvm", :id, "--ioapic", "on"  ]
    v.memory = 2048
    v.cpus = 2
  end

  # enable provisioning with puppet stand alone.  puppet manifests
  # are contained in a directory path relative to this vagrantfile.
  # you will need to create the manifests directory and a manifest in
  # the file myproject-debian_64.box.pp in the manifests_path directory.
  #
  # an example puppet manifest to provision the message of the day:
  #
  # # group { "puppet":
  # #   ensure => "present",
  # # }
  # #
  # # file { owner => 0, group => 0, mode => 0644 }
  # #
  # # file { '/etc/motd':
  # #   content => "welcome to your vagrant-built virtual machine!
  # #               managed by puppet.\n"
  # # }

  config.vm.hostname = "vm.myproject.io"

  # install eyaml-gpg
  config.vm.provision :shell, inline: "if [ ! -f /usr/local/bin/eyaml ]; then gem install hiera-eyaml; fi"

  config.vm.provision :puppet, run: "always" do |puppet|

    puppet.manifests_path = "#{myproject_path}/puppet/environments/development/manifests"
    puppet.manifest_file  = "site.pp"
    puppet.module_path    = "#{myproject_path}/puppet/modules"

    # mount special-sauce hiera config with modified paths to data
    puppet.hiera_config_path = "#{myproject_path}/puppet/hiera-vm.yaml"
    #pass in --verbose --debug to debug the puppet run.
    puppet.options = "--environment development"
  end

  config.librarian_puppet.puppetfile_dir = "#{myproject_path}/puppet"
  config.librarian_puppet.use_v1_api = "1"
  config.librarian_puppet.destructive = false

  # enable provisioning with chef solo, specifying a cookbooks path, roles
  # path, and data_bags path (all relative to this vagrantfile), and adding
  # some recipes and/or roles.
  #
  # config.vm.provision :chef_solo do |chef|
  #   chef.cookbooks_path = "../my-recipes/cookbooks"
  #   chef.roles_path = "../my-recipes/roles"
  #   chef.data_bags_path = "../my-recipes/data_bags"
  #   chef.add_recipe "mysql"
  #   chef.add_role "web"
  #
  #   # you may also specify custom json attributes:
  #   chef.json = { :mysql_password => "foo" }
  # end

  # enable provisioning with chef server, specifying the chef server url,
  # and the path to the validation key (relative to this vagrantfile).
  #
  # the opscode platform uses https. substitute your organization for
  # orgname in the url and validation key.
  #
  # if you have your own chef server, use the appropriate url, which may be
  # http instead of https depending on your configuration. also change the
  # validation key to validation.pem.
  #
  # config.vm.provision :chef_client do |chef|
  #   chef.chef_server_url = "https://api.opscode.com/organizations/orgname"
  #   chef.validation_key_path = "orgname-validator.pem"
  # end
  #
  # if you're using the opscode platform, your validator client is
  # orgname-validator, replacing orgname with your organization name.
  #
  # if you have your own chef server, the default validation client name is
  # chef-validator, unless you changed the configuration.
  #
  #   chef.validation_client_name = "orgname-validator"

  # upload .gitconfig into the vm at boot time
  # config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"

end

$ ls -l ../../../../puppet
total 88
-rw-r--r--   1 leehambley  staff   915 May 26 20:20 Puppetfile
-rw-r--r--   1 leehambley  staff  1310 May 26 20:20 Puppetfile.lock
-rw-r--r--   1 leehambley  staff   366 May 26 20:20 README.eyaml.txt
-rw-r--r--   1 leehambley  staff  1347 Jun 25 12:57 README.md
-rw-r--r--   1 leehambley  staff  2569 May 26 20:20 auth.conf
-rw-r--r--   1 leehambley  staff    12 May 26 20:20 autosign.conf
drwxr-xr-x   6 leehambley  staff   204 Jul 10 21:56 data
drwxr-xr-x   7 leehambley  staff   238 Jun  8 20:24 environments
-rw-r--r--   1 leehambley  staff   381 May 26 20:20 fileserver.conf
-rw-r--r--   1 leehambley  staff   469 May 26 20:20 hiera-vm.yaml
-rw-r--r--   1 leehambley  staff   377 May 26 20:20 hiera.yaml
drwx------   4 leehambley  staff   136 Nov 17  2014 keys
drwxr-xr-x  18 leehambley  staff   612 Jul 11 19:21 modules
-rw-r--r--   1 leehambley  staff  1166 May 26 20:20 puppet.conf
drwxr-xr-x  13 leehambley  staff   442 Jul  7 21:24 scripts
drwxr-xr-x  15 leehambley  staff   510 May 26 20:20 src
-rw-r--r--   1 leehambley  staff    24 May 26 20:20 tagmail.conf

@leehambley Could you verify that modules being installed in ../../../../puppet/modules?

We wrapped this in a makefile, so we didn't need to try and figure out why the plugin stopped working reliably. Please feel free to close this.

I have the same issue. Path is definitely correct.
 46 remoteProvisioningPath = "/vagrant/provisioning/puppet"
 47   provisioningPath = File.join(currentDir, "provisioning/puppet")
 48
 49   # Enable librarian_puppet plugin support
 50   config.librarian_puppet.puppetfile_dir = "#{provisioningPath}"
 51   config.librarian_puppet.placeholder_filename = ".gitkeep"
 52
 53   config.vm.provision "puppet" do |puppet|
 54     puppet.working_directory = "#{remoteProvisioningPath}"
 55     puppet.environment = "development"
 56     puppet.environment_path = "#{provisioningPath}/environments"
 57     puppet.manifests_path = "#{provisioningPath}/manifests"
 58     puppet.manifest_file  = "site.pp"
 59     puppet.module_path = "#{provisioningPath}/modules"
 60     puppet.hiera_config_path = "#{provisioningPath}/hiera.yaml"
 61     puppet.synced_folder_type = "nfs"
 62   end

No matter what it never attempts to run librarian-puppet, even though it's installed.

@jmcclell I am unable to reproduce this with vagrant 1.7.4.  Could you provide a complete Vagrantfile?

jason@jason-mbp15r:~/dev/test$ vagrant --version
Vagrant 1.7.4

jason@jason-mbp15r:~/dev/test$ vagrant plugin list
vagrant-dns (1.0.0)
vagrant-librarian-puppet (0.9.1)
vagrant-share (1.1.5, system)
vagrant-vbguest (0.11.0)

VM Name
vmName = "test-vm"
VM Network Configuration Parameters
boxIP = ENV['VAGRANT_IP'] || "<IP_ADDRESS>"
httpPort = ENV['VAGRANT_HTTP_PORT'] || 8080
httpsPort = ENV['VAGRANT_HTTPS_PORT'] || 4443
mysqlPort = ENV['VAGRANT_MYSQL_PORT'] || 3310
esPort = ENV['VAGRANT_ES_PORT'] || 9200
config.vm.hostname = vmName
Vagrant DNS Configuration
config.dns.tld = "dev"
config.dns.patterns = [/^(.+.)*test.vagrant.dev$/]
#VagrantDNS::Config.logger = Logger.new(File.join(currentDir, "dns.log"))
config.vm.network :private_network, ip: boxIP
config.vm.network "forwarded_port", guest: 80, host: httpPort
config.vm.network "forwarded_port", guest: 443, host: httpsPort
config.vm.network "forwarded_port", guest: 3310, host: mysqlPort
config.vm.network "forwarded_port", guest: 9200, host: esPort
config.vm.post_up_message = "Test Development Environment: files located in /vagrant"
config.ssh.forward_agent = true
config.vm.synced_folder ".", "/vagrant", type: "nfs"
config.vm.provider "virtualbox" do |vb|
vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
vb.customize ["modifyvm", :id, "--memory", "4096"]
#vb.customize ["modifyvm", :id, "--cpus", 2]
#vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
remoteProvisioningPath = "/vagrant/provisioning/puppet"
provisioningPath = File.join(currentDir, "provisioning/puppet")
Enable librarian_puppet plugin support
config.librarian_puppet.puppetfile_dir = "#{provisioningPath}"
config.librarian_puppet.placeholder_filename = ".gitkeep"
config.vm.provision "puppet" do |puppet|
puppet.working_directory = "#{remoteProvisioningPath}"
puppet.environment = "development"
puppet.environment_path = "#{provisioningPath}/environments"
puppet.manifests_path = "#{provisioningPath}/manifests"
puppet.manifest_file  = "site.pp"
puppet.module_path = "#{provisioningPath}/modules"
puppet.hiera_config_path = "#{provisioningPath}/hiera.yaml"
puppet.synced_folder_type = "nfs"
end
end

@jhoblitt Were you able to reproduce this by chance? I realize the holidays are here and most of us are taking time off, but was just curious if it was on my end. :)

So it appears that both @leehambley and myself are using Ruby code to generate an absolute path to our project root and then using absolute paths everywhere else, including when configuring librarian_puppet.puppetfile_dir. Unfortunately, the plugin doesn't handle this well due to this line in lib/action/librarian_puppet.rb: if File.exist? File.join(env[:root_path], config.puppetfile_path(puppetfile_dir))
I'll submit a PR with my proposed fix for review.

@jmcclell Hola -- the PR got lost in the email scrollback while I was traveling.  I will take a look at this soon.

@jhoblitt ping

BTW, just in case this could affect reproduction - if Vagrantfile installs a new plugin, Vagrant has to be restarted to pick up the installed plugin. See http://stackoverflow.com/a/28801317/164137 for an example on how I do this.

I'm experiencing the same problem as the OP.
My Vagrantfile:
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.provider :virtualbox do |vb|
    vb.memory = 1024
  end
  config.hostmanager.enabled = true
  config.hostmanager.manage_host = true
  config.hostmanager.ignore_private_ip = false
  config.hostmanager.include_offline = true
  config.puppet_install.puppet_version = '4.5.2'
  config.librarian_puppet.puppetfile_dir = "puppet/environments/default"
  config.librarian_puppet.use_v1_api  = '0' # Check https://github.com/rodjek/librarian-puppet#how-to-use
  config.librarian_puppet.destructive = 'false' # Check https://github.com/rodjek/librarian-puppet#how-to-use
  config.vm.provision "puppet" do |puppet|
    puppet.environment_path = "puppet/environments"
    puppet.environment = "default"
  end
  nodes.each do |node|
    config.vm.define node[:name] do |node_config|
      node_config.hostmanager.aliases = node[:aliases]
      node_config.vm.box = node[:box]
      node_config.vm.hostname = node[:fqdn]
      node_config.vm.network "private_network", ip: node[:ip]
      node_config.vm.provider :virtualbox do |vb|
        vb.memory = node[:mem]
      end
    end
  end
end

I can confirm that a manual install works if I specify the module path, eg. LIBRARIAN_PUPPET_PATH=modules librarian-puppet install
I tried manually hacking in the PR mentioned in this issue but that didn't seem to work either.
Any further ideas?
@leehambley - what was your work around?

@robinbowes The original issue was due to absolute vs relative paths, and thus the PR fixes that. It does not look like you are using absolute paths, so it seems your problem is entirely different.
This, perhaps, indicates that what the plugin really needs is some better error logging / debug output. Failing silently is obviously very frustrating.
As for your actual issue, you say it works when you run LIBRARIAN_PUPPET_PATH=modules librarian-puppet install, but I don't see you setting LIBRARIAN_PUPPET_PATH in your Vagrantfile. I don't see you setting your modules directory at all. I don't know if that is your problem or if it even makes sense in Puppet 4, but that's what I notice off the bat. Nothing else jumped out at me as being off.

@jmcclell puppet 4 uses environments so it assumes that modules are in eg. puppet/environments/default/modules.
I had assumed librarian-puppet would simply append modules to the specified Puppetfile dir but that doesn't seem to be the case?

@robinbowes This library hasn't been updated in quite some time. I get the impression @jhoblitt is busy with other projects (I can certainly relate!) and hasn't had the time to update this plugin to seamlessly work with Puppet 4.
Maybe you can make a PR? :)
A workaround, iirc (it's been quite some time since I've used P4 with this plugin, but I know I have at one point!) is to set the module_path option via the puppet config and have it point directly to the directory representing what was once called "site.pp" - not sure if that's still the standard in P4.

@jmcclell I tried setting the modulepath, but it doesn't make it work.
I'd love to dig in to this and work out a fix but I don't want to get distracted from my main goal at the moment (setting up a kafka-based logging/metrics PoC).
R.

The README definitely needs some TLC and a blurb about puppet 4.
Something else that would imensely helpful would be a travis config the installs and runs vagrant with some sort of null config.
I am using this plugin with puppet 4.  This is a snippet out of a working Vagrantfile:
  config.puppet_install.puppet_version = '4.4.1'

  config.vm.provision "puppet", type: :puppet do |puppet|
    puppet.hiera_config_path = "hiera.yaml"
    puppet.environment_path  = "environments"
    puppet.environment       = "jenkins"
    puppet.manifests_path    = "environments/jenkins/manifests"
    puppet.manifest_file     = "default.pp"

    puppet.options = [
     '--verbose',
     '--trace',
     '--report',
     '--show_diff',
     '--disable_warnings=deprecations',
    ]
  end

  if Vagrant.has_plugin?('vagrant-librarian-puppet')
    config.librarian_puppet.placeholder_filename = ".gitkeep"
    config.librarian_puppet.puppetfile_dir = "environments/jenkins/modules"
  end

I also believe that the Vagrantfile in this repo for testing is working with puppet4: https://github.com/voxpupuli/vagrant-librarian-puppet/blob/master/Vagrantfile

Hmm, that seems almost the same as my config, except you appear to have your Puppetfile in your modules dir?

@robinbowes It is at the top level.  Here is a [fairly complicated] working Vagrantfile: https://github.com/lsst-sqre/sandbox-jenkins-demo

I got it working by adding this to the provision method:
environment.config_db.local['path']         = 'modules'

What version of vagrant are you running?

Did you try appending modules to config.librarian_puppet.puppetfile_dir?

I'm using Vagrant 1.8.4.
Yes, I tried appending modules - it doesn't find the Puppetfile. If I move the Puppetfile into the modules dir, it generates Puppetfile.lock, but doesn't install any modules.

What is the content of your .librarian/puppet/config ?

BTW, my code is at: https://github.com/robinbowes/vagrant-kafka-logging

https://github.com/lsst-sqre/sandbox-jenkins-demo/blob/master/.librarian/puppet/config

OK, so that will make it work - the modules dir is specified in the config file.

Sounds like we need to at least document that or try to get this plugin to work without it.

Just wondering - what would be involved in adding or supporting r10k? Isn't it supposed to be a better implementation of a Puppetfile processor?

I had time to re-visit this and have created #54 - this solves my issues, and a couple of other long-standing tickets. It needs regression testing with a variety of puppet envs and the documentation needs updating.

Hello people.
I Have a problem with vagrant-librarian-puppet.
I create a class below:
class loja_virtual {
class { ’apt’:
always_apt_update => true,
}
Class[’apt’] -> Package <| |>
}
To use the module  puppetlabs/apt , according with my   Puppetfile file.
forge "http://forge.puppetlabs.com"
mod "puppetlabs/apt", "1.4.0"
But when I run de vagrant command:
vagrant provision  db
I received the error below:
C:\Users\Alex>vagrant provision  db
==> db: Running provisioner: puppet...
==> db: Running Puppet with db.pp...
==> db: stdin: is not a tty
==> db: warning: Could not retrieve fact fqdn
==> db: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class apt at /tmp/vagrant-puppet/modules-f206d375085e296a1dbbabaf9428e877/loja_virtua
8 on node precise32
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
If in debug mode:
vagrant provision --debug  db
I received the error below:
should be in the log above. Please read the output to determine what
went wrong.
ERROR vagrant: C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.1/plugins/communicators/ssh/communicator.rb:240:in execute' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.1/plugins/communicators/ssh/communicator.rb:250:in sudo'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.1/plugins/provisioners/puppet/provisioner/puppet.rb:276:in run_puppet_apply' C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.1/plugins/provisioners/puppet/provisioner/puppet.rb:128:in provision'
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.1/lib/vagrant/action/builtin/provision.rb:133:in `run_provisioner'
Does anyone have any idea what it might be?

Please post your complete Vagrantfile.

Hello Joshua Hoblitt
Vagrantfile.txt
Thank you.

Hello Joshua Hoblitt.
I discovered the problem.
I was create the file Puppetfile, with notepad from Windows, and this was create the Puppetfile.txt
I  read, about creation, the Puppetfile, and this haven´t none extension, then this was not recognized.
Now I have a new problem, and I am checking.
C:\Users\Alex>vagrant up db
Bringing machine 'db' up with 'virtualbox' provider...
==> db: Importing base box 'hashicorp/precise32'...
==> db: Matching MAC address for NAT networking...
==> db: Checking if box 'hashicorp/precise32' is up to date...
==> db: Setting the name of the VM: Alex_db_1483055850699_40245
==> db: Installing Puppet modules in "librarian" with Librarian-Puppet...
Unable to load puppet. Please install it using native packages for your platform (eg .deb, .rpm, .dmg, etc).
No such file or directory - puppet
Thank you very much for your interest in helping.
regards.
Alex Andrade Esperanca

Hello Joshua Hoblitt.
Finished the problem
Due to the errors found previously, it had:
Update  VirtualBox-5.1.8-111374-Win  to  VirtualBox-5.1.12-112440-Win.
Update vagrant_1.8.7  to vagrant_1.9.1.
Now, is all OK.
regards.
mod "puppetlabs/apt", "1.4.0"   para
mod "rtyler/jenkins", "1.0.0"      para
Agora esta OK.
Obrigado


[checkpoint] Some minor cleanups

Mostly minor typos + code cleanups.
Things require review:
There are 2 bugs fixes:

The quorum threshold comparison should be >=
When merging two nodes in the spanning tree, we should detect the case of merging already merged nodes.

Also added some TODOs to rename some of the proposal structs. Didn't rename them yet to avoid creating merging conflicts on the pending active checkpoint work.

When merging two nodes in the spanning tree, we should detect the case of merging already merged nodes.
I am impressed you caught that. I just fixed it on the active checkpointing logic.


fix: correct authentication querysets

Description

Fix authentication issuers. Users will now only have their notes when logged in.
How to test / reproduce

Scouting 🏕

Added django-stubs for cleaner code editor
Review checklist

[x] PR is ready

PR is split into meaningful commits (if needed) for the ease of reviewing
Description contains clear instructions on how to test the feature

[x] Tests have been written
[ ] Appropriate labels have been applied

CI not running, so will close this PR and re-open.


Please update for Laravel 10.0

Hi, I tried to install to Laravel 10.0 it is not allow. Please update composer if it is workable

Hmm works great for me on a fresh installed Laravel 10 app:

I managed it to work manually by downloading and setting composer files. If on here add to the composer.json with require laravel ^10.0, it will help to run composer require … to install.

I added it to composer...

Great. very good support. This works very well.


new: Add documentation for POST domain//clone

Add documentation for cloning a dns zone
Domain endpoint reference:

Detailed endpoint reference

Coverage remained the same at 71.27% when pulling 78e20691150c2f5bce13dab72bfdcd1bb574e7c8 on SzySteve:docs/clone-zone into a9817180908f0e400afa25c96eebb3a2c5356981 on linode:pending-docs-updates.

In the description, a domain name is not a URL, a URL includes a scheme (e.g. http://) and a path (e.g. /), which are irrelevant to the domain name system.
Also, it would make more sense to use a second-level domain name as an example (e.g. mynewdomain.com) instead of a third-level domain (e.g. www.mynewdomain.com), because this endpoint copies the entire Domain Zone, which includes all record types (MX records, AAAA records etc.). Usually you do this if you buy a new second-level domain.

Coverage increased (+0.03%) to 71.296% when pulling 595a13a1b1d40b91ebf6f95d1f9ddfbf4eb84e04 on SzySteve:docs/clone-zone into a9817180908f0e400afa25c96eebb3a2c5356981 on linode:pending-docs-updates.


[GH 390] Fix incorrect escaping of initial_root_password

Description

Return raw password from root_password instead of shell-escaping
SQL-escape the password variable before rendering in init_records_script
Generate the mysql init records script as a quoted heredoc

The previous code was broken for some passwords because it used shell escaping for all values, based on historical behaviour that sent the passwords to mysql on the command line.
It was not updated to take account of the difference between shell and SQL escaping when the cookbook was changed to generate a SQL file and pipe it to mysql.
Mysql usually ignores \ escapes in string literals - \x becomes x, \& becomes &. However some - notably % - are shell-escaped to \% but stay as \% when parsed by mysql.
See http://dev.mysql.com/doc/refman/5.7/en/string-literals.html
eg: PASSWORD('pa\$\$w%d') === pa$$w%d
The previous implementation was assigning an incorrect root password on  initialisation, making the instance unusable.
This fixes the issue by only escaping explicit \ and ' characters in the password string and rendering in a quoted heredoc so that shell escaping is not required.
Note: this is not a perfect SQL quoting solution - it may break with nulls, tabs, and other non-printable special characters, but it seems reasonable to assume these are unlikely to be used in passwords.
Issues Resolved
Fixes #390 issues with special characters in root password
Check List

[x] All tests pass. See https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/TESTING.MD
[x] New functionality includes testing (modified existing test with more 'special' password)
[x ] (N/A) New functionality has been documented in the README if applicable
[x] The CLA has been signed. See https://github.com/chef-cookbooks/community_cookbook_documentation/blob/master/CONTRIBUTING.MD

Sorry for all the back-and-forward on this, I don't have a working test-kitchen set up locally and made some errors transferring the proof and fix over from the cookbook I was testing it in.
The two commits here now correctly show the existing code assigning an incorrect root password, and the working fix.

Thanks @acoulton


Unable to complete "EF Core with Razor Pages : Getting Started."  Missing EF Design package?

I am trying to follow along with the "EF Core with Razor Pages : Getting Started" tutorial but having issues with one of the steps.
https://learn.microsoft.com/en-us/aspnet/core/data/ef-rp/intro?view=aspnetcore-7.0&tabs=visual-studio-code
I am trying to run dotnet ef database update.  However, the step fails due to missing packages.
Error
Your startup project 'ContosoUniversity' doesn't reference Microsoft.EntityFrameworkCore.Design. This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.

Can you add some additional text for installing this package?  I may have done it in previous tutorials but I can't find it.

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: 7a54c97f-ddd4-b041-5e5f-a2df009ace50
Version Independent ID: fa488196-1f98-08ea-adcc-17d9dac86727
Content: Razor Pages with Entity Framework Core in ASP.NET Core - Tutorial 1 of 8
Content Source: aspnetcore/data/ef-rp/intro.md
Product: aspnet-core
Technology: aspnetcore-data
GitHub Login: @tdykstra
Microsoft Alias: riande

Closing this issue.
I was confused about the tutorial.  It was referring to the completed project, not the tutorial.


Reload data enters the delegate methods only one time

Hi,
I am facing an issue,In my application I wan to reload the datas dynamically at different times.I am calling reloadData() but it is not entering in the delegate methods. I am using swift component
Thanks

I updated the calendar component a lot today and would urge you to retry this.
if it doesn't work plz try to clearly state what you are doing that doesn't work / what you try & expect.
I can confirm that the reloading works. The swift example even loads everything asynchronously

Hi @Daij-Djan,
I am facing same issue. :(
Description:
I was fetching data from server for today's appointments, once I got the data I reloaded the calendarView. I was also checked this reloadData functionality with new version 2.0, but facing same issue.
This is my code. If I am wrong somewhere please correct me. Thanks in advance !!!!

@YogeshBharate I see you call reloadData in loadEvents inside the completionBlock of getTodaysScheduleAppointments. Is it on the main thread? try to add: assert(NSThread.isMainThread()) before calling reloadData

if that is the issue: dispatch_async(dispatch_get_main_queue()) { self.calenderView.reloadData() }
if not, please provide me a small runnabe example... if possible

@Daij-Djan I tried what you said in the above comment, but still the issue exists. I have created a small runnable demo, where when I got data, then I reloaded calendar view, but it has not loaded. Please Check the demo.

the component works fine but your code has serveral isssues:

the main issue is, that swift arrays are passed-by-value and not by reference. you attempt to fill ddEvents after you store in dict.... so the dict remains empty at all times

the data you provide is wrong. e.g. the sample gets 6 events for the 10th of august BUT you save that for the 9th .. so the events are shown WAY down

the fix for 1. is .... save the ddevents in the dict
the fix for 2. is .... fix the data. ;)
->for 1 the bug could be the misuse of focussed on day. that method isnt called for reloadData.
so I removed your func calendarViewfocussedOnDay and changed eventsForDay to load data if needed:
func calendarView(view: DDCalendarView, eventsForDay date: NSDate) -> [AnyObject]? {
let days = date.daysFromDate(NSDate())
if dict[days] == nil {
	self.loadCachedEvents(days) { (events) -> Void in
		self.showData()
		print("DAY: \(days)")
	}
}
return dict[days]
}

I also fixed fillEvents to reset the dict
LAST I fixed the json data so the 9th is mapped to today..  just so I didnt always have to swipe to tommorrow :D

Great !!! Can you update your code to CalendarView repo ? Thanks in advance !!! This is the invitation link to update repo.


Implement paste to govspeak

What
Converts pasted formatted content to GovSpeak
Why
This work will reduce the effort and time for publishers to create new content, including HTML attachments and as a result, increase interest in creating HTML attachments by default
https://trello.com/c/c6hcyFgA/432-add-paste-html-to-govspeak-to-whitehall
⚠ This repo is Continuously Deployed: make sure you follow the guidance ⚠

I will merge this once JP has reviewed it on integration

I will merge this once JP has reviewed it on integration

JP signed off


Embedded Metrics Format Lab - emf5 image is not showing correctly

In this page, https://observability.workshop.aws/en/emf/clientlibrary.html , the markdown is showing instead of the image
https://observability.workshop.aws/en/emf/clientlibrary.html

Addressed this issue


stage1: create a minimal producer for the systemd block in stage1

In #1074 I describe a bug where systemd in stage1 got to a state where it's not executing any jobs. The workaround was removing OnFailureJobMode=isolate from the app unit.
However, we should have a better understanding of this bug and fix it in upstream systemd if it's a systemd bug.

@iaguis can this be closed via #1407  ?

Yeah, I don't think investigating the cause of that bug is worth it now that we're changing completely stage1's structure. We don't even isolate units now.


Lat/Lon directions are swapped!

This is an issue technically baked into the DFRobot GNSS/GPS device itself and not the drivers, but the issue needs to be ideally addressed in the firmware, or if not, it must be worked around in the drivers.
This line of code, which ostensibly reads latitude direction (N/S), instead returns the correct direction of longitude (E/W)!
On the other hand, this line of code, which likewise is supposed to read longitude direction (E/W), instead returns the correct direction of latitude (N/S)!

Have been modified


android shoutcast stream delay

Shoutcast it delay on platform android
have to wait for 20 seconds for the song to play.
how to fix it

  void playHomeFirst() async {
if (playerStateHome == null) {
  await audioPlayerHome.play("http://##############");
  playerStateHome = _PlayerStateHome.playing;
  notifyListeners();
}}

but ios is working
version audioplays ^0.14.0

Icecast also delay

There isn't enough information on this issue for us to act on. Please edit this, or open a new one and please follow the issue template.
Feel free to comment here and we can re open this eventually.


feat(grid): responsive grid layout with dynamic column widths

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


The A/V/AV request through 'Request GetUserMedia' returns the error

On host A: Browse to http://test.webrtc.org/manual/peer2peer page
On host A: Request Audio/Video/AV by clicking on 'Request GetUserMedia

Actual Result: The Error message is seen as follows:
Failed to load resource: the server responded with a status of 404 (OK)
/manual/peer2peer/js/main.js:1108 getUserMedia says: ReferenceError: getUserMedia is not defined
Expected Result: The request should be success and based on the request, the audio or video or both should be functional.

I fixed it by adding back components/ to app.yml and components/webrtc-adapter folder when pushing to GAE. Need to fix it permanently however, should work in the meantime though.


WIP libnetwork - Add support for /networks and /services API endpoints

Tested with docker experimental.
The API is going to change (with the sandbox entity: see docker/libnetwork#365), but I open the PR to keep track of the evolution on both sides.
TODO items:

[ ] Add error scheme for all methods
[ ] Move the networks and services endpoints in their own file (networks.go/services.go?)
[ ] Include new sandbox entity
[ ] Refactor and split tests

Signed-off-by: Alexandre Beslic<EMAIL_ADDRESS>

Also, it's now probably time to cleanup the client a little bit... And split in multiple files (containers.go/images.go/networks.go/services.go, etc.)

@aboch can you please take a look ?

/cc @aluzzardi @vieux @chanwit @jimmyxian (cc'ing just so you can follow the discussion here ;)

:+1:

Cool, split in multiple files is pretty good.

Awesome :)
But ... aren't we going to blindly proxy the calls to the engine anyway ? :)

@aluzzardi
In Swarm, I think proxy the calls to the engine is a good way to keep api fresh.

@aluzzardi Most of them yes ;)
@aboch Thanks! Will revisit and fix when your PR will be merged on libnetwork's side.

replaced by #169 that supports the new networking UX


Tools: Configuration runner generator - overview

Implement generator for convention and configuration test templates

args

package_name
style (convention | configuration)
output | create

https://trello.com/c/rLuVQQHu
https://trello.com/c/Yv53s8AF
https://trello.com/c/kRwsR1eF
https://trello.com/c/IjeF2HjG

moved to pete-generator project - https://github.com/principal-engineering/pete-generator


"copy" method is deprecated,

Hi,
Trying to update Shipit, I was previously using grunt-shipit.
I have this in my package.json file
"shipit-cli": "^5.0.0",
"shipit-deploy": "^5.0.0",
"shipit-shared": "^4.4.2"

I created a shipitfile.js in my root folder, as explained on the repo
// shipitfile.js
module.exports = shipit => {
    // Load shipit-deploy tasks
    require('shipit-deploy')(shipit);
    require('shipit-shared')(shipit);

    shipit.initConfig({
        "default": {
            "workspace": "/tmp/workspace",
            "repositoryUrl": "git@git.myhost.com:myproject/mysite.com.git",
            "url": "http://mysite.test",
            "deployTo": "/tmp/deployTo",
            "ignores": [
                ".git",
                ".gitignore",
                ".gitattributes",
                ".idea",
                "Gruntfile.js",
                "package.json",
                "ruleset.xml",
                "Vagrantfile",
                "config/bonzai/grunt",
                "config/bonzai/*.json",
                "public/app/uploads",
                "public/app/cache",
                "public/app/advanced-cache.php",
                "public/app/wp-rocket-config",
                "html",
                "tmp"
            ],
            "keepReleases": 5,
            "branch": "develop",
            "shallowClone": true,
            "updateSubmodules": true,
            "shared": {
                "overwrite": true,
                "triggerEvent": "updated",
                "dirs": [
                    {
                        "path": "public/app/uploads",
                        "overwrite": true,
                        "chmod": "-R 755"
                    },
                    {
                        "path": "public/app/cache",
                        "overwrite": true,
                        "chmod": "-R 755"
                    },
                    {
                        "path": "public/app/wp-rocket-config",
                        "overwrite": true,
                        "chmod": "-R 755"
                    },
                    {
                        "path": "/logs",
                        "overwrite": true,
                        "chmod": "-R 755"
                    }
                ],
                "files": [
                    ".env",
                    "public/.htaccess",
                    "public/app/advanced-cache.php",
                    "public/wp-load.php"
                ]
            }
        },

        "staging": {
            "servers"<EMAIL_ADDRESS>            "deployTo": "/staging.mysite.com",
            "url": "http://staging.mysite.com",
            "shared": {
                "symlinkPath": "/var/www/vhosts/mysite.com/staging.mysite.com/shared"
            }
        },

        "production": {
            "servers"<EMAIL_ADDRESS>            "deployTo": "/httpdocs",
            "url": "http://mysite.com",
            "branch": "master",
            "shared": {
                "symlinkPath": "/var/www/vhosts/mysite.com/httpdocs/shared"
            }
        }
    });

    // just a test task
    shipit.task('copyConfig', async () => {
        await shipit.copyToRemote(
            '/README.md',
            'README.md'
        )
    })

};

Running npx shipit deploy production returns this error
Copy previous release to "/httpdocs/releases/20190826070712"
Running "cp -a /httpdocs/releases/20190131232531/. /httpdocs/releases/20190826070712" on host "mysite.com".
Copy project to remote servers.
"copy" method is deprecated, please use "copyToRemote", "copyFromRemote", "scpCopyToRemote" or "scpCopyFromRemote". It will break in v5.0.0.
@mysite.com-err tar: tmp-219407onQe7lfGIJ4: Cannot stat: No such file or directory
@mysite.com-err tar: Exiting with failure status due to previous errors
'deploy:update' errored after 11 s
Error: Command failed: cd C:\Users\conta\AppData\Local\Temp && tar --exclude ".git" --exclude ".gitignore" --exclude ".gitattributes" --exclude ".idea" --exclude "Gruntfile.js" --exclude "package.json" --exclude "ruleset.xml" --exclude "Vagrantfile" --excl
ude "puphpet" --exclude "config/puphpet" --exclude "config/bonzai/grunt" --exclude "config/bonzai/*.json" --exclude "public/app/uploads" --exclude "public/app/cache" --exclude "public/app/advanced-cache.php" --exclude "public/app/wp-rocket-config" --exclud
e "html" --exclude "tmp" -czf tmp-44088kaW8LhNXmtB1.tar.gz tmp-44088LVUrvJC6e0bC
tar: tmp-44088LVUrvJC6e0bC: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

As you can see, I don't use any copy function in my shipitfile. Where does this error come from? Is it coming from shipit-deploy? Are those version incompatibles? Any tip?
Can the error comes from cd C:\Users\conta\AppData\Local\Temp && tar Why is it using this folder since my Project is located in conta@DESKTOP-8E2IO5G MINGW64 /d/Projets/junktone/junktone.test (running commands on windows from Mingw64? I maybe suspect that a firewall could block attempts for this folder to be written maybe.
Regards.

Hi,
I can confirm that it work if I use this command from a VM.
Anyway to not use this path C:\Users\conta\AppData\Local\Temp ? I think that bitDefender is preventing access to it.
Regards.

Anyway, forget this, need grunt support and this is dropped since 4.0.0.
Rolled back to
"shipit-cli": "^1.4.1",
"shipit-deploy": "^2.2.0",

Regards.


Add detailed tracking

Adds optional kwargs to track function: source_id and client_ip. Adds those fields and sets Revision tag to 1 in the request XML which results in much more detailed tracking information.
See https://www.usps.com/business/web-tools-apis/track-and-confirm-api_files/track-and-confirm-api.htm#_Toc22881026 for details

Please merge this, BuluBox!

Thank you! :grin:


Add int64_t typemap for swig

Session.list_devices()  gives  wrong memory bytes, and after the call, swig complains a memory leak:
# on Win7, 1.3.0RC1
>>> s.list_devices()
[_DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 69731600)]
>>> 1
swig/python detected a memory leak of type 'int64_t *', no destructor found.
1

# on Linux, 1.3.0RC2
>>> s.list_devices()
[_DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU,<PHONE_NUMBER>1520), _DeviceAttributes(/job:localhost/replica:0/task:0/device:GPU:0, GPU,<PHONE_NUMBER>0144)]
>>> 1
swig/python detected a memory leak of type 'int64_t *', no destructor found.
swig/python detected a memory leak of type 'int64_t *', no destructor found.
1

The reason is the CAPI TF_DeviceListMemoryBytes returns value of type 'int64_t', for which swig can not generate a correct wrapper:
TF_CAPI_EXPORT extern int64_t TF_DeviceListMemoryBytes(
    const TF_DeviceList* list, int index, TF_Status*);

SWIGINTERN PyObject *_wrap_TF_DeviceListMemoryBytes(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
  //...
  result = TF_DeviceListMemoryBytes((TF_DeviceList const *)arg1,arg2,arg3);
  // problem  here
  resultobj = SWIG_NewPointerObj((new int64_t(static_cast< const int64_t& >(result))), }

 //...
}

This wrapper causes the python side code read the address rather than the value of the int64_t variable (which is why memory bytes is wrong). And since there is no destructor for int64_t, swig complains about it.
There is another CAPI TF_Dim that has the same problem.
The problem is solved by adding a int64_t  typemap for swig, then the wrapper will be like this:
    result = TF_DeviceListMemoryBytes((TF_DeviceList const *)arg1,arg2,arg3);
    //...
    resultobj = PyLong_FromLongLong(result);

Can one of the admins verify this patch?

@jart Friendly ping for review. Thanks!

@skye take a quick look?

Jenkins, test this please.

Transient failures, trying again.
Jenkins, test this please.

Transient failure on Windows, trying again.
Jenkins, test this please.


Fix transparent background

Fix for https://github.com/zerodevx/svelte-img/issues/6
Don't show blurred background if image is loaded

Why has this been closed?

Why has this been closed?

it should handle non-transparent background lqip as well

Just that on the latest versions I am still able to reproduce this issue, had to use a workaround described at https://github.com/zerodevx/svelte-img/issues/6#issuecomment-1481602878


OFFBOARD loss with logging freeze

Yesterday i met some strange behavior on my drone. We had a mission to takeoff, fly and land in another location. Everything in OFFBOARD mode using RPi and MAVROS.
After takeoff the drone suddenly lost offboard mode for a second. It could be our code glitch... BUT! At the same moment ALL flight data hasn't been logged! Too strange to be a coincidence. Look at the logs. Also here is some our logs with flight mode got from mavros topic and timestamp (microseconds). You can see POSCTL in our log but not in PX4 log. Also COM_OF_LOSS_T was set to 4 seconds and that makes things even more strange.

13_15_19.ulg.zip

can you please post the log on logs.px4.io?

https://logs.px4.io/plot_app?log=a410c5bb-478b-4146-8054-8f26745eacae

The only thing that comes to me right now is that it could be a temporary powering issue

How could it be powering issue without influence to flight control or any other subsystem? At the same moment RPi received at least one mavlink package, and drone's orientation / motor's sound was normal and stable.

How could it be powering issue without influence to flight control or any other subsystem?

Power issues or spikes may usually result on logging drops. I already saw that happening on other logs I've seen. Did you reproduce this on other experiments during testing? Or did you just saw this happening once?

Did you reproduce this on other experiments during testing?

Yes, it was logged at least once on the different hardware. Not sure I can find that file, but it was almost the same. Today we've lost offboard mode once again, unfortunately with no SD card inserted. Will continue testing.
I don't care so much about a few seconds of missing log data, but offboard losses are critical since we are going to fly without RC at all or, at least, far away out of visual range.

Did you make sure your telem link is stable? Can you show me the output of the MAVROS terminal? Also the output of rostopic echo -n1 /diagnostics? This of course during a test where you actually get this problem. What's the baud rate of your link?

Hey, this issue has been closed because the label status/STALE is set and there were no updates for 30 days. Feel free to reopen this issue if you deem it appropriate.
(This is an automated comment from GitMate.io.)


vscode: 1.70.2 -> 1.71.0

Motivation for this change
Upgrades vscode from 1.70.2 to 1.71.0
This PR was automatically generated by nixpkgs-upkeep.

CI workflow that created this PR.
Internal tag: 3b2a99b4459fe82f92af0ac4274c367a.

Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[ ] NixOS
[ ] macOS
[x] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

@ofborg eval

@samuela How to trigger upkeep to have the vscode version 1.71.1 ?

CI should be triggering soon. You can always check the logs in the nixpkgs-upkeep project


Refactor Thrift.Transport.SSL.configuration/1

The implementation did not respect its type signature, which specified that the
error form of the return value should contain an exception as the second
element. This expectation is relied upon by maybe_ssl_handshake. However the
callback passed in the :configure option could return anything, and we return
its response without fully verifying that it matches the configuration
typespec.
Also refactored the code for clarity.

I must have closed #511 accidentally.


Added multiple tokenizers implementing new ITokenizer interface

 Issue by Ehryk
Saturday Aug 01, 2015 at 06:05 GMT
Originally opened as https://github.com/gsscoder/commandline/pull/212

Persuant to issue #108, I have renamed the default tokenizer to TokenizerGetOpt, and added TokenizerWindows (currently just '/', '//' variant of TokenizerGetOpt), and TokenizerHybrid (allowing both '-','/' and '--','//' together). I also added a ITokenizer interface to set a standard for possibly other tokenizers.
Because static classes cannot implement interfaces, the tokenizers are no longer static and must be instantiated before use (which is now done so using TokenizerGetOpt).

Ehryk included the following code: https://github.com/gsscoder/commandline/pull/212/commits

 Comment by gsscoder
Saturday Aug 01, 2015 at 06:15 GMT

@Ehryk, thanks for PR! I'm not agree to support an hybrid tokenizer but the other parts seem OK.
As you can see I've recently promoted the library from alpha to beta and except fixes I'll delay accepting PR until it stabilizes.
I was about opening an announcement issue on that.
I'll back on the question ASAP.

 Comment by gsscoder
Saturday Aug 01, 2015 at 06:20 GMT

Please see Issue #213.

 Comment by gsscoder
Monday Aug 03, 2015 at 05:45 GMT

@Ehryk, are you proposing to open this part of the library and let people define their own Tokenizer?
I just want to you don't need an ITokenizer interface since a Func delegate is already its signature:
Func<IEnumerable<string>, IEnumerable<OptionSpecification>, Result<IEnumerable<Token>, Error>>

As used all over the code... :)

 Comment by Ehryk
Sunday Aug 02, 2015 at 22:27 GMT

Are you comfortable with the general structure (any class that implements the ITokenizer interface can be used to tokenize the command line)?
This way even if you aren't interested in supporting a Hybrid or Windows tokenizer, they could be added and supported separately? There could even be other tokenizers added for variants (of which I am not familiar, but perhaps some other use case would desire).


Form aria-label support

In the interest of providing some aria support for react forms.

For @mpeterson2


Neo Geo CD support

Hi @city41! I'm not sure if you considered this already in the past, but it would be awesome to get support for creating Neo Geo CD .neo files at some point, as mentioned here: https://wiki.terraonion.com/index.php/NeoSD_Pro_CD_Setup_Guide
I'm currently looking into adding CD support to our game, so this would me a massive help :)

That would be awesome. But as far as I know, Terraonion and Razoola haven't released any info on how CD .neos are made. I doubt I'd be able to reverse engineer the process. I also think since they've only released 50 games so far, that might suggest the process varies a bit from game to game.


Catch and prune connections to stale Qt callbacks in events.py

Description
Curious to get peoples' feelings on this.  cc @goanpeca, @sofroniewn
In working on #3184, it became clear that the biggest hurdle to reuse of our evented objects (after closing a Qt window), is the fact that python wrappers for "deleted" QtObjects stick around long after the QObject is deleted, causing the classic RuntimeError: wrapped C/C++ object has been deleted problem if an EventEmitter tries to call a method that belongs to a dead object.
events.py already does try to catch whether a connected callback is no longer useful: it stores weakrefs to the object that owns the callback method, and if that object has been garbage collected, simply refuses to call the callback and deletes it.  It seems to me that we should also have that behavior for connected Qt objects...  but it's a bit tricker since their python wrappers don't get garbage collected.
This PR catches a call to a dead Qt object and quietly deletes the callback, just as it would for a dead non-Qt python object.
Type of change

[x] Bug-fix (non-breaking change which fixes an issue)

How has this been tested?

[ ] example: the test suite for my feature covers cases x, y, and z
[ ] example: all tests pass with my change

Final checklist:

[ ] My PR is the minimum possible work for the desired functionality
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] If I included new strings, I have used trans. to make them localizable.
For more information see our translations guide.

i should note: i don't think this should substitute for careful cleanup (we should still have a disposal pattern for Qt objects that die before the connected evented object does), but it may also help avoid some stragglers that cause needless errors