Warning: loading in progress, circular require considered harmful

Please note we will close your issue without comment if you delete, do not read or do not fill out the issue checklist below and provide ALL the requested information. If you repeatedly fail to use the issue template, we will block you from ever submitting issues to Homebrew again.
Please always follow these steps:

[x] Confirmed this is a problem with running a brew command and not brew installing or the post-install behaviour of one or more formulae? If it's a formulae-specific problem please file this issue at the relevant tap e.g. for Homebrew/homebrew-core https://github.com/Homebrew/homebrew-core/issues/new
[x] Ran brew update and retried your prior step?
[x] Ran brew doctor, fixed all issues and retried your prior step?
[x] Ran brew config and brew doctor and included their output with your issue?

Here it is; I know I have a few outdated things, but that isn't really relevant to the issue.
~/H/L/Homebrew ❯❯❯ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: Putting non-prefixed coreutils in your path can cause gmp builds to fail.

Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected dylibs:
  /usr/local/lib/libjack.0.1.0.dylib
  /usr/local/lib/libjacknet.0.1.0.dylib
  /usr/local/lib/libjackserver.0.1.0.dylib

Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected header files:
  /usr/local/include/jack/control.h
  /usr/local/include/jack/intclient.h
  /usr/local/include/jack/jack.h
  /usr/local/include/jack/jslist.h
  /usr/local/include/jack/metadata.h
  /usr/local/include/jack/midiport.h
  /usr/local/include/jack/net.h
  /usr/local/include/jack/ringbuffer.h
  /usr/local/include/jack/session.h
  /usr/local/include/jack/statistics.h
  /usr/local/include/jack/systemdeps.h
  /usr/local/include/jack/thread.h
  /usr/local/include/jack/transport.h
  /usr/local/include/jack/types.h
  /usr/local/include/jack/uuid.h
  /usr/local/include/jack/weakjack.h
  /usr/local/include/jack/weakmacros.h

Warning: Unbrewed .pc files were found in /usr/local/lib/pkgconfig.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected .pc files:
  /usr/local/lib/pkgconfig/jack.pc

Warning: You have uncommitted modifications to Homebrew
If this is a surprise to you, then you should stash these modifications.
Stashing returns Homebrew to a pristine state but can be undone
should you later need to do so for some reason.
  cd /Users/easyaspi/Homebrew/Library && git stash && git clean -d -f

Warning: Your Homebrew's prefix is not /usr/local.
You can install Homebrew anywhere you want but some bottles (binary packages)
can only be used with a /usr/local prefix and some formulae (packages)
may not build correctly with a non-/usr/local prefix.

Warning: Your XQuartz (2.7.9) is outdated.
Please install XQuartz 2.7.11 (or delete the current version).
XQuartz can be updated using Homebrew-Cask by running
  brew cask reinstall xquartz
~/H/L/Homebrew ❯❯❯ brew config
HOMEBREW_VERSION: 1.3.9-54-g236e884
ORIGIN: https://github.com/Homebrew/brew
HEAD: 236e884511495f466c766b2913cde66099a26e1c
Last commit: 7 hours ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: aa288f2fed35434445392353c66fe573355fd1e0
Core tap last commit: 77 minutes ago
HOMEBREW_PREFIX: /Users/easyaspi/Homebrew
HOMEBREW_REPOSITORY: /Users/easyaspi/Homebrew
HOMEBREW_CELLAR: /Users/easyaspi/Homebrew/Cellar
HOMEBREW_CELLAR: /Users/easyaspi/Homebrew/Cellar
HOMEBREW_DEVELOPER: 1
HOMEBREW_GITHUB_API_TOKEN: set
HOMEBREW_PREFIX: /Users/easyaspi/Homebrew
HOMEBREW_REPOSITORY: /Users/easyaspi/Homebrew
HOMEBREW_VISUAL: nano
CPU: dual-core 64-bit penryn
Homebrew Ruby: 2.3.3 => /Users/easyaspi/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.3/bin/ruby
Clang: 8.0 build 800
Git: 2.15.0 => /Users/easyaspi/Homebrew/bin/git
Curl: 7.43.0 => /usr/bin/curl
Perl: /Users/easyaspi/Homebrew/bin/perl => /Users/easyaspi/Homebrew/Cellar/perl/5.26.1/bin/perl
Python: /Users/easyaspi/Homebrew/opt/python/libexec/bin/python => /Users/easyaspi/Homebrew/Cellar/python/2.7.14/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Ruby: /Users/easyaspi/Homebrew/bin/ruby => /Users/easyaspi/Homebrew/Cellar/ruby/2.4.2_1/bin/ruby
Java: 9, 1.8.0_152, 1.8.0_131, 1.8.0_25
macOS: 10.11.6-x86_64
Xcode: 8.2.1
CLT: <IP_ADDRESS>.1.1480973914
X11: 2.7.9 => /opt/X11
~/H/L/Homebrew ❯❯❯

To help us debug your issue please explain:

What you were trying to do (and why)
What happened (include command output)
What you expected to happen
Step-by-step reproduction instructions (by running brew commands)

TL;DR:
ruby -W0 hurts kittens.
Long answer:
Basically, changing -W0 in the Homebrew Ruby command to --verbose shows that there are some "harmful" circular requirements, which  I presume might be a source of performance issues.
I am no Ruby expert, so I would not be the one to fix this. 😞
Either way, if Ruby calls it harmful, it should probably be looked at.
Step 1: Apply this git patch:
diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh
index 795ddcc4d..2a214d35a 100644
--- a/Library/Homebrew/brew.sh
+++ b/Library/Homebrew/brew.sh
@@ -361,5 +361,5 @@ else

   # Unshift command back into argument list (unless argument list was empty).
   [[ "$HOMEBREW_ARG_COUNT" -gt 0 ]] && set -- "$HOMEBREW_COMMAND" "$@"
-  { update-preinstall; exec "$HOMEBREW_RUBY_PATH" -W0 "$HOMEBREW_LIBRARY/Homebrew/brew.rb" "$@"; }
+  { update-preinstall; exec "$HOMEBREW_RUBY_PATH" --verbose "$HOMEBREW_LIBRARY/Homebrew/brew.rb" "$@"; }
 fi

Step 2: Run any brew command. Different commands might have different results.
Example: Output of brew
Note that to reduce redundancy, I replaced ~/homebrew/Library/Homebrew with ..
~/h/L/Homebrew ❯❯❯ brew
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./os.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:5:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/pathname.rb:4:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./utils.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./emoji.rb:14:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/emoji.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./os.rb:3:in  `<top (required)>'
	from ./os.rb:17:in  `<module:OS>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./os/mac.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./hardware.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./extend/os/mac/hardware/cpu.rb:11: warning: method redefined; discarding old optimization_flags
./hardware.rb:17: warning: previous definition of optimization_flags was here
./extend/os/mac/hardware/cpu.rb:17: warning: method redefined; discarding old type
./hardware.rb:60: warning: previous definition of type was here
./extend/os/mac/hardware/cpu.rb:28: warning: method redefined; discarding old family
./hardware.rb:69: warning: previous definition of family was here
./extend/os/mac/hardware/cpu.rb:80: warning: method redefined; discarding old universal_archs
./hardware.rb:56: warning: previous definition of universal_archs was here
./extend/os/mac/hardware/cpu.rb:98: warning: method redefined; discarding old can_run?
./hardware.rb:119: warning: previous definition of can_run? was here
./extend/os/mac/hardware/cpu.rb:108: warning: method redefined; discarding old features
./hardware.rb:111: warning: previous definition of features was here
./extend/os/mac/hardware/cpu.rb:140: warning: method redefined; discarding old sse4?
./hardware.rb:87: warning: previous definition of sse4? was here
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./development_tools.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:5:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/pathname.rb:4:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./utils.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./emoji.rb:14:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/emoji.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./os.rb:3:in  `<top (required)>'
	from ./os.rb:17:in  `<module:OS>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./os/mac.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./development_tools.rb:127:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/development_tools.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./extend/os/mac/development_tools.rb:21: warning: method redefined; discarding old installed?
./development_tools.rb:18: warning: previous definition of installed? was here
./extend/os/mac/development_tools.rb:68: warning: method redefined; discarding old default_compiler
./development_tools.rb:36: warning: previous definition of default_compiler was here
./extend/os/mac/development_tools.rb:85: warning: method redefined; discarding old curl_handles_most_https_certificates?
./development_tools.rb:117: warning: previous definition of curl_handles_most_https_certificates? was here
./extend/os/mac/development_tools.rb:91: warning: method redefined; discarding old subversion_handles_most_https_certificates?
./development_tools.rb:121: warning: previous definition of subversion_handles_most_https_certificates? was here
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./emoji.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:5:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/pathname.rb:4:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./utils.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./emoji.rb:14:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/emoji.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./keg_relocate.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula_pin.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./keg.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./keg_relocate.rb:180:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/keg_relocate.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./extend/os/mac/keg_relocate.rb:22: warning: method redefined; discarding old relocate_dynamic_linkage
./keg_relocate.rb:29: warning: previous definition of relocate_dynamic_linkage was here
./extend/os/mac/keg_relocate.rb:47: warning: method redefined; discarding old detect_cxx_stdlibs
./keg_relocate.rb:88: warning: previous definition of detect_cxx_stdlibs was here
./extend/os/mac/keg_relocate.rb:134: warning: method redefined; discarding old file_linked_libraries
./keg_relocate.rb:175: warning: previous definition of file_linked_libraries was here
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./utils/bottles.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:5:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./utils/bottles.rb:120:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/bottles.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./extend/os/mac/utils/bottles.rb:4: warning: method redefined; discarding old tag
./utils/bottles.rb:7: warning: previous definition of tag was here
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./tap.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:9:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formulary.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./requirements/osxfuse_requirement.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:10:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./software_spec.rb:6:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./dependency_collector.rb:5:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./requirements.rb:9:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./requirements/osxfuse_requirement.rb:11:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/requirements/osxfuse_requirement.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./requirements/java_requirement.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:10:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./software_spec.rb:6:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./dependency_collector.rb:5:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./requirements.rb:12:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./requirements/java_requirement.rb:118:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/requirements/java_requirement.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./extend/os/mac/requirements/java_requirement.rb:28: warning: method redefined; discarding old possible_javas
./requirements/java_requirement.rb:64: warning: previous definition of possible_javas was here
./extend/os/mac/requirements/java_requirement.rb:51: warning: method redefined; discarding old oracle_java_os
./requirements/java_requirement.rb:101: warning: previous definition of oracle_java_os was here
./extend/os/mac/requirements/x11_requirement.rb:7: warning: method redefined; discarding old min_version
./requirements/x11_requirement.rb:17: warning: previous definition of min_version was here
./extend/os/mac/requirements/x11_requirement.rb:16: warning: method redefined; discarding old message
./requirements/x11_requirement.rb:43: warning: previous definition of message was here
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./dependency_collector.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:10:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./software_spec.rb:6:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./dependency_collector.rb:184:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/dependency_collector.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./extend/os/mac/dependency_collector.rb:2: warning: method redefined; discarding old ant_dep
./dependency_collector.rb:61: warning: previous definition of ant_dep was here
./extend/os/mac/dependency_collector.rb:7: warning: method redefined; discarding old xz_dep
./dependency_collector.rb:65: warning: previous definition of xz_dep was here
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./tap.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:13:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./formula.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:15:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./migrator.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./formula.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:16:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/ENV.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/ENV/shared.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./extend/ENV/shared.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:16:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/ENV.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/ENV/shared.rb:342:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/extend/ENV/shared.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./extend/ENV/std.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:16:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/ENV.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/ENV/std.rb:245:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/extend/ENV/std.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./extend/os/mac/extend/ENV/std.rb:32: warning: method redefined; discarding old homebrew_extra_pkg_config_paths
./extend/ENV/std.rb:52: warning: previous definition of homebrew_extra_pkg_config_paths was here
./extend/os/mac/extend/ENV/std.rb:113: warning: method redefined; discarding old x11
./extend/ENV/std.rb:210: warning: previous definition of x11 was here
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./extend/ENV/super.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./formula.rb:16:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/ENV.rb:4:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/ENV/super.rb:331:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./extend/os/extend/ENV/super.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
./extend/os/mac/extend/ENV/super.rb:5: warning: method redefined; discarding old bin
./extend/ENV/super.rb:27: warning: previous definition of bin was here
./extend/os/mac/extend/ENV/super.rb:15: warning: method redefined; discarding old homebrew_extra_paths
./extend/ENV/super.rb:98: warning: previous definition of homebrew_extra_paths was here
./extend/os/mac/extend/ENV/super.rb:29: warning: method redefined; discarding old homebrew_extra_pkg_config_paths
./extend/ENV/super.rb:127: warning: previous definition of homebrew_extra_pkg_config_paths was here
./extend/os/mac/extend/ENV/super.rb:36: warning: method redefined; discarding old homebrew_extra_aclocal_paths
./extend/ENV/super.rb:144: warning: previous definition of homebrew_extra_aclocal_paths was here
./extend/os/mac/extend/ENV/super.rb:42: warning: method redefined; discarding old homebrew_extra_isystem_paths
./extend/ENV/super.rb:156: warning: previous definition of homebrew_extra_isystem_paths was here
./extend/os/mac/extend/ENV/super.rb:51: warning: method redefined; discarding old homebrew_extra_library_paths
./extend/ENV/super.rb:171: warning: previous definition of homebrew_extra_library_paths was here
./extend/os/mac/extend/ENV/super.rb:58: warning: method redefined; discarding old homebrew_extra_cmake_include_paths
./extend/ENV/super.rb:194: warning: previous definition of homebrew_extra_cmake_include_paths was here
./extend/os/mac/extend/ENV/super.rb:67: warning: method redefined; discarding old homebrew_extra_cmake_library_paths
./extend/ENV/super.rb:202: warning: previous definition of homebrew_extra_cmake_library_paths was here
./extend/os/mac/extend/ENV/super.rb:74: warning: method redefined; discarding old homebrew_extra_cmake_frameworks_paths
./extend/ENV/super.rb:210: warning: previous definition of homebrew_extra_cmake_frameworks_paths was here
./extend/os/mac/extend/ENV/super.rb:80: warning: method redefined; discarding old determine_cccfg
./extend/ENV/super.rb:243: warning: previous definition of determine_cccfg was here
./extend/os/mac/extend/ENV/super.rb:118: warning: method redefined; discarding old set_x11_env_if_installed
./extend/ENV/super.rb:326: warning: previous definition of set_x11_env_if_installed was here
./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55: warning: loading in progress, circular require considered harmful - ./tap.rb
	from ./brew.rb:21:in  `<main>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./global.rb:63:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./compat/tap.rb:1:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./tap.rb:3:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./readall.rb:2:in  `<top (required)>'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
	from ./vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in  `require'
Example usage:
  brew search [TEXT|/REGEX/]
  brew (info|home|options) [FORMULA...]
  brew install FORMULA...
  brew update
  brew upgrade [FORMULA...]
  brew uninstall FORMULA...
  brew list [FORMULA...]

Troubleshooting:
  brew config
  brew doctor
  brew install -vd FORMULA

Developers:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  https://docs.brew.sh/Formula-Cookbook.html

Further help:
  man brew
  brew help [COMMAND]
  brew home
~/h/L/Homebrew ❯❯❯

/*
 * # Features
 * Please replace this section with:
 * - a detailed description of your proposed feature
 * - the motivation for the feature
 * - how the feature would be relevant to at least 90% of Homebrew users
 * - what alternatives to the feature you have considered
 *
 * We will close this issue or ask you to create a pull-request if it's something we're not actively planning to work on.
 */

I am no Ruby expert, so I would not be the one to fix this. 😞

This aside, we'll accept PRs for this but this doesn't seem to be directly affecting users as-is so is low priority.


[call-v3] Do not register max-age filter when chaotic-good is enabled.

follow-up on #36225

@ctiller Just updated the PR to not register max-age filter with chaotic-good.


Support status: looking for community maintainers

Disclaimer: this project is not officially maintained by Sentry.
The code is under the getsentry GitHub organization because it was created by a former employee as an internal Hack Week proof-of-concept.
Expect no support, expect things to be broken in unimaginable ways, use at your own risk.
There are a few alternatives developed by the community:

https://github.com/stevelacy/go-sentry-kubernetes
https://github.com/wichert/k8s-sentry

Extracted from discussion in https://github.com/getsentry/sentry-kubernetes/issues/7#issuecomment-545003358.
Would you like to contribute bringing this project back to life? We're looking for project maintainers from the Sentry community. Please drop a comment below if you'd like to help.

Hey @rhcarvalho I am currently re-writing the whole thing in a new branch https://github.com/mekza/sentry-kubernetes/tree/v2.0.0

Came across https://github.com/gmetrixr/k8s-sentry as well.

FWIW https://sentry-kubernetes.github.io is archived and also appears to be dead. https://github.com/gmetrixr/k8s-sentry is a fork of https://github.com/wichert/k8s-sentry (which hasn't been updated since 2020).

If anyone is interested, I rewrote it in rust here: https://github.com/alekitto/sentry-kubernetes
If you want to try it, there's an helm chart also to ease the deployment.


LiteDB does not support deserializing recursive data types via DbRef?

I'm using version 3.1.1 of the NuGet package. Consider the following:
using LiteDB;
using System;
using System.Collections.Generic;

namespace LiteDBRecursion
{
    class Program
    {
        public class Directory
        {
            public int Id { get; set; }

            public string Path { get; set; }

            public List<Directory> Subdirectories { get; set; }

            public Directory()
            {
                Subdirectories = new List<Directory>();
            }
        }

        static void Main(string[] args)
        {
            var databasePath = @"MyData.db";

            System.IO.File.Delete(databasePath);

            using (var db = new LiteDatabase(databasePath))
            {
                db.Mapper.Entity<Directory>()
                    .Id(x => x.Id)
                    .Field(x => x.Path, "path")
                    .Field(x => x.Subdirectories, "subdirectories")
                    .DbRef(x => x.Subdirectories, nameof(Directory));

                var directories = db.GetCollection<Directory>(nameof(Directory));

                // Insert a recursive object
                RecurseInsert(directories, new Directory()
                {
                    Path = @"C:\",
                    Subdirectories = new List<Directory>()
                    {
                        new Directory()
                        {
                            Path = @"C:\foo",
                            Subdirectories = new List<Directory>()
                            {
                                new Directory()
                                {
                                    Path = @"C:\foo\bar"
                                }
                            }
                        }
                    }
                });

                // Print database
                Console.WriteLine("Printing database:");
                foreach (var collectionName in db.GetCollectionNames())
                {
                    var collection = db.GetCollection(collectionName);

                    Console.WriteLine($"Collection: {collectionName}");

                    foreach (var bsonDocument in collection.FindAll())
                    {
                        Console.WriteLine($"\t{bsonDocument.ToString()}");
                    }
                }

                // Recursively print the object
                Console.WriteLine("Printing objects:");
                RecursePrint(directories
                    .Include(x => x.Subdirectories)
                    .FindOne(Query.EQ("path", new BsonValue(@"C:\"))));
            }
        }

        private static void RecurseInsert(LiteCollection<Directory> directories, Directory directory)
        {
            foreach (var subdirectory in directory.Subdirectories)
            {
                RecurseInsert(directories, subdirectory);
            }

            directories.Insert(directory);
        }

        private static void RecursePrint(Directory directory, string padding = "")
        {
            Console.WriteLine($"{padding}{directory.Path}");

            foreach (var subdirectory in directory.Subdirectories)
            {
                RecursePrint(subdirectory, $"{padding}\t");
            }
        }
    }
}

This is the output I get:
Printing database:
Collection: Directory
        {"_id":1,"path":"C:\\foo\\bar","subdirectories":[]}
        {"_id":2,"path":"C:\\foo","subdirectories":[{"$id":1,"$ref":"Directory"}]}
        {"_id":3,"path":"C:\\","subdirectories":[{"$id":2,"$ref":"Directory"}]}
Printing objects:
C:\
        C:\foo

The tree appears to have serialized correctly to the database (see under Printing database), but then when I attempt to deserialize and print the recursive structure, only the child object (C:\foo) of the root element (C:\) got populated. The child of that child (C:\foo\bar) did not get deserialized correctly.
Does LiteDB not support deserializing recursive data types when using DbRef? If not, why? This is a problem for anyone who wants to serialize a tree structure with a depth greater than 20.

Hi! With the objective of organizing our issues, we are closing old unsolved issues. Please check the latest version of LiteDB and open a new issue if your problem/question/suggestion still applies. Thanks!


"check for updates" button for Linux

From @pedzed on October 13, 2016 17:55
On Windows and macOS you have a button to update Atom to the latest version. It would be nice if Linux also had that. If the update functionality will not be implemented (anytime soon), it would be nice if there's a button that tells you if an update is available - just so you know that your version is outdated. And perhaps also instructions on how to update.
Currently, you have to check at https://github.com/atom/atom/releases to see if there is a newer version. Understandably, that is far from ideal.
Copied from original issue: atom/about#38

From @doxman on October 1, 2017 21:24
Added a link to updating instructions for now. I would also like to add a "Check for updates" function but am uncertain how to proceed -- left some more thoughts on this in the PR's "Alternate Designs" section.
(first attempt at contributing to open source, please be gentle :slightly_smiling_face: )

Seems like you'd need to know how the user installed it to begin with -- which package manager, system-wide or local, etc. Not sure how you'd figure it out. Perhaps get creators of .rpm, .deb, etc. packages to include a file with update information?

For systems that have PackageKit installed, you can use that to abstract away the underlying packaging system. If PackageKit is not available, you might want to check if user has permissions to write to the atom installation directory. If so, allow updating from the .tar.gz file, and if not, revert to current behavior (since the user can't update if they can't write to the current installation directory).

FYI, if it makes you feel any better, Windows and Mac have that "Check for updates" button, but it doesn't work, so Linux users are not that much worse off.
I agree it would be a good feature to have, working, especially if it provided greater clarity about whether an update would preserve customizations or not.

There are repositorys for linux with all three branches. This way the sytems package manager holds all the strings for atom updates. #https://github.com/atom/atom/issues/2956
With this the issue should be closed imo.


Custom build system reasoning

Is there any reason for the custom Python script used as the build system instead of the GDK-integrated ZIP build system?

Hi. It's because the ZIP build system didn't offer good control over what to exclude from the ZIP. That seems to have been improved since this repo was published: https://github.com/aws-greengrass/aws-greengrass-gdk-cli/releases/tag/v1.5.0


Website doesn't have a meta description

I ran the Chrome lighthouse report, and it gave me an SEO error:

Meta descriptions may be included in search results to concisely summarize page content. Learn more about the meta description.

We'll need to add the new attribute right here: https://github.com/doug-wade/tybalt/blob/master/packages/website/index.html#L2

Looks like our first try at this didn't work because we used the fancy double-quotes

Oh that's my bad! 😄
I am pretty sure I just copied it off the Lighthouse reference link and changed the description, strange why it used a different Unicode character for the double quotes. 🤔
Thanks for the second fix.


uploader.result.listen called twice on iOS

I'm using uploader.progress.listen to show a progress notification and then uploader.result.listen to show a final notification, this is working perfectly fine on Android but on iOS, I see first a final notification, then a lot of progress notifications, and then a final notification again. It seems like uploader.result.listen is called before the file is uploaded and then is called again when the process ends

same here

Did you find the solution?

@DavidAriza, did you got any solution for this?


It would be nice if PUK etc. could be programmed

It would be very nice if a PUK code could be defined in CSIS settings. And the amount of PIN/PUK retries.
Currently the CLI tool is needed to set these manually after programming the key with CSIS.

Would you like one PUK key for all cards?
#21 is probably relevant for you.
As for the retry counts, we discussed that in a previous round and settled on not introducing the complexity. But for sure, some could need it. We envisioned setting it in a general settings, and then on enrolls and pin resets to set this new retry count.

I just read the documentation again and I can live with reading the PUK from store file for the records. Is there a reason it cannot be viewed in application?
 In some documentation it is said that the "set-ccc" operation must be done with yubico-piv-tool. Is this done by EnrollmentStation?

 For the usability, it may confuse users more than it gains (we haven't had a request for this before, as an example). Users may incorrectly believe they MUST save the PUK key (since you MUST save a PUK key for a SIM Card f.ex.), leading to extra unecessary tasks.
For the security side, we don't want users to bring secret values out of the protected environment. If we started showing the PUK key, the users would become aware of it and possibly begin writing them down and storing them elsewhere. The mere display of the value invokes thoughts and processes that can only reduce the security of the system.
Would you mind explaining why you need the PUK key? .. I'm very curious as to what process requires it :).
The ES does not run the Change Mode processes automatically. We had an idea about providing a Change Mode dialog and functionality, but it died a little. It turns out, that the Yubikey will present itself as three different types of devices with three different client libraries. You can Change Mode with any of the client libraries, but only if the Yubikey works with a specific Mode.
If you f.ex. came with a Yubikey that was set for only OTP mode, we need to run the OTP client library to discover the Yubikey, and then investigate and change the Mode of they key, only to require you to detach/re-attach the key and have it rediscovered by the OTP and PIV libraries.
We would effectively need to support all three libraries and have discovery routines in place regularily for all three client libraries for this one feature. We opted not to do this.

It was just a requirement to document the PUK per card. I can do it by reading from the file.
Regarding Change Mode, I definitely would not need it and did not know it is the same thing as the "set-ccc" functionality of the yubico-piv-tool. This was just confusion on my part and may be disregarded then.
Thank you for your time.

@ian-csis would you have anything against showing the PUK key?
I went ahead and prototyped it. I extended the cert display with a hidden field:

Clicking the Show link reveals the key:

Selecting a new enrolled key will hide the field again and show the Show link. So you explicitly have to click Show to reveal each key.

@bluikko we looked at the prototype I made and decided not to go with it for now. You have a work around that works for you, and in our opinion the PUK keys shouldn't be outside this system.
I'll close this for now - Write back if you have other questions. :)

We had the same problem.
The smart card are in China and the users has tried to changed the pin in the integrated pin change logon screen of windows 7 and blocked it. Because the hotfix  kb2808693 was missing the gpo didn't work.
https://forum.yubico.com/viewtopic64dc.html?f=23&t=2495
This is way we had to change the pin without resending it.
yubico-piv-tool -k $ManagementKey -a unblock-pin -P $OldPuk -N $NewPin
We solved the problem by writing a powershell script to export the store in csv format .
$prgPath="C:\Program Files (x86)\Enrollment Station v<IP_ADDRESS>"
[Reflection.Assembly]::LoadFile("$prgPath\Newtonsoft.Json.dll")
$logDate = get-date -f yyyyMMddhhmm
$csvfile = "$($prgPath)\export-puk_$logDate.csv"
# list to export
$longlist = @()

# functions
function ConvertFrom-JObject($obj) {
   if ($obj -is [Newtonsoft.Json.Linq.JArray]) {
        $a = @()
        foreach($entry in $obj.GetEnumerator()) {
            $a += @(convertfrom-jobject $entry)
        }
        return $a
   }
   elseif ($obj -is [Newtonsoft.Json.Linq.JObject]) {
       $h = [ordered]@{}
       foreach($kvp in $obj.GetEnumerator()) {
            $val =  convertfrom-jobject $kvp.value
            if ($kvp.value -is [Newtonsoft.Json.Linq.JArray]) { $val = @($val) }
            $h += @{ "$($kvp.key)" = $val }
       }
       return $h
   }
   elseif ($obj -is [Newtonsoft.Json.Linq.JValue]) {
        return $obj.Value
   }
   else {
    return $obj
   }
}

function ConvertFrom-JsonNewtonsoft([Parameter(Mandatory=$true,ValueFromPipeline=$true)]$string) {
$obj = [Newtonsoft.Json.JsonConvert]::DeserializeObject($string, [Newtonsoft.Json.Linq.JObject])
    return ConvertFrom-JObject $obj
}

function ConvertTo-JsonNewtonsoft([Parameter(Mandatory=$true,ValueFromPipeline=$true)]$obj) {
    return [Newtonsoft.Json.JsonConvert]::SerializeObject($obj, [Newtonsoft.Json.Formatting]::Indented)
}

# Main

$f = [System.IO.File]::ReadAllText("$($prgPath)\store.json")
$r=ConvertFrom-JsonNewtonsoft($f)
$list=$r.YubiKeys

for ($i=0;$i -lt $list.count;$i++)
{
  $d = $list.DeviceSerial[$i]
  $u = $list.username[$i]
  $p = $list.PukKey[$i]
  $m = $list.ManagementKey[$i]
  $e = [Convert]::FromBase64String($m)
  $f = [BitConverter]::ToString($e).Replace("-","")

  $details = @{
           serialnr = $d
           username = $u
           pukkey = $p
           managekey = $f
        }
   $longlist += New-Object PSObject -Property $details
}


an_instance_of(String) not matching a string? Nor does anything

Your environment

Ruby version: 2.5.0
rspec-mocks version: 3.7.1

Steps to reproduce
Have a test with:
      it "returns as json" do
        expect(
          subject
        ).to eq(
          {
            "data" => {
              "type" => "accounts",
              "attributes" => {
                "email" =><EMAIL_ADDRESS>                "password" => anything
              }
            },
            "meta" => {
              "jsonapi_version" => "1.0"
            },
            "included" => [
              {
                "data" => {
                  "id" => "a",
                  "type" => "widget",
                  "attributes" => {
                    "title" => "Widget A"
                  }
                }
              }
            ]
          }
        )
      end

Expected behavior
Complete match.
Actual behavior
  1) SmartParams#as_json with a reasonably good params returns as json
     Failure/Error:
       expect(
         subject
       ).to eq(
         {
           "data" => {
             "type" => "accounts",
             "attributes" => {
               "email" =><EMAIL_ADDRESS>               "password" => anything
             }

       expected: {"data"=>{"type"=>"accounts"<EMAIL_ADDRESS>"password"=>anything}}, "...>"1.0"}, "included"=>[{"data"=>{"id"=>"a", "type"=>"widget", "attributes"=>{"title"=>"Widget A"}}}]}
            got: {"data"=>{"type"=>"accounts"<EMAIL_ADDRESS>"password"=>"bd564a75e2a0...>"1.0"}, "included"=>[{"data"=>{"id"=>"a", "type"=>"widget", "attributes"=>{"title"=>"Widget A"}}}]}

       (compared using ==)

       Diff:
       @@ -1,4 +1,4 @@
       -"data" => {"type"=>"accounts"<EMAIL_ADDRESS>"password"=>anything}},
       +"data" => {"type"=>"accounts"<EMAIL_ADDRESS>"password"=>"bd564a75e2a04a4ca4f2aec24c18b46203c2d316d88ff5bee3dd57067d951c76"}},
        "included" => [{"data"=>{"id"=>"a", "type"=>"widget", "attributes"=>{"title"=>"Widget A"}}}],
        "meta" => {"jsonapi_version"=>"1.0"},

an_instance_of and anything are part of rspec-mocks' argument matching functionality. I suppose they weren't intended to be used elsewhere.
I was able to make a simplified version of your example work by changing eq to match, though. Maybe give that a try?

an_instance_of and anything are part of rspec-mocks' argument matching functionality. I suppose they weren't intended to be used elsewhere.

They don't provide as nice of output, but they do work just fine as matchers in an expression like what @krainboltgreene is doing.

I was able to make a simplified version of your example work by changing eq to match, though. Maybe give that a try?

This is exactly what's going on, and it's by design.  eq only matches when the objects are strictly ==.  That's the semantics eq is documented to provide.  {key: anything} is not == to {key: "some value"}.
OTOH, match is designed to allow you to embed matches in data structures to "fuzzy match" like what you are trying to do--so use that!

Ahhhhh! That must be it, thanks so much!


[clblast] Add new port

The related issue #5440.

Thanks for the new port, @NancyLi1013! @Voskrese as a heads up since you created #5440, the dependency opencl only builds for x64-windows x64-windows-static, and x86-windows. This means that clblast will only work for those triplets by extension. I see from clblast's repo that both Mac and Linux are also supported, so feel free to submit fixes for opencl if you'd like to see this new port available on other triplets!


Surface reportAttributeAccessIssue even when type checking mode set to off

This is from a convo with @DanielRosenwasser about this suggestion: https://github.com/microsoft/pyright/issues/7579
He brought up a good point that it seems to be a pretty common mistake to try to access TypedDict attributes using . instead of [""].  For example:
from typing import TypedDict

class Person(TypedDict):
    name: str

def func(p: Person):
    print(p.name) ## ---> should be p["name"]

It'd be nice if we could surface a diagnostic even when type checking mode is set to off to help users catch this error sooner, as many times it may cause a run time error. He suggested we could surface it as a suggestion diagnostic too, which I think it's a good idea if we believe error would be too intrusive.
We'd probably get bonus points for surfacing a "Fix code spelling" code action to translate from .key to ["key"] :)

it seems to be a pretty common mistake

Do we have evidence of this statement? Or is this just conjecture. I suspect this mistake is more common for someone coming from TypeScript, but I'm guessing that it's much more rare for Python programmers.
I'd be reluctant to create a separate diagnostic category that is particular to this very specific error case.

It's probably better to focus less on the specific error message being discussed and more broadly on where suggestion diagnostics can be applied.
In TypeScript, we issue suggestion diagnostics in unchecked JavaScript files for several error messages. I briefly called it out in https://github.com/microsoft/pyright/issues/7579.

A couple of example errors that get surfaced as suggestion diagnostics include:

Misspelled local bindings
Misspelled properties/attributes
Unnecessary await (which I believe is actually a hard error in Python?)
Integral literals that cannot be safely represented (e.g.<PHONE_NUMBER>000000000000)

For Pylance, the first one already has a quick fix in the language service (though the error message doesn't mention any suggestion). The next two don't have any fixes.
Related:

https://github.com/microsoft/TypeScript/issues/41582
https://github.com/microsoft/TypeScript/issues/45349


Added ASCII-only output support

Please also see my latest comments in #80.

I provided an initial description of the intended grammar here: https://mpusz.github.io/units/framework/text_output.html#grammar. I hope it will be OK now, otherwise please share the feedback ;-)

@yasamoka, grammar changes are done now. You can now proceed without conflicts. Sorry if you had issues with merging because of this.

@yasamoka, grammar changes are done now. You can now proceed without conflicts. Sorry if you had issues with merging because of this.

Thank you very much! No, not at all - these past 3 days I haven't been able to work on this. Hopefully today I'll be able to implement the changes needed. Should not have any real issues with merging.
By the way, if I keep adding commits here until we reach the final solution, how would one go about avoiding clutter to the commits? Would this be something you can handle from your end by, say, "flattening" commits?

Great to hear that!
Regarding, your question I really do not bother about having a parallel branch with your commits and a merge commit after that. This is how you worked on it, in parallel, so we might have parallel commits on 2 separate branches. I am more worried about the merge conflicts you and GitHub might have. Maybe, just from a technical point of view, it is better to rebase your commit on top of master and then force push it to your repo. GitHub should be able to do the rest ;-)

Hi, could you please rebase your branch/changes on top of master? I am unable to perform a review of 34 commits from different authors and changes in 51 files.

Hi, could you please rebase your branch/changes on top of master? I am unable to perform a review of 34 commits from different authors and changes in 51 files.

 After rebasing, it asked me to resolve conficts (with the new grammar), which I did. Then I continued the rebase and it informed me that something has diverged, that my branch is 1 commit ahead, 34 commits behind, and that I had to pull from my branch. I did that, then a merge conflict happened and I had to resolve that (several old conflicts reappeared and others had empty incoming changes). Then I pushed to my branch. However, I mistakenly kept some version control headers in format.h so I rebased, attempting to fix that. Then I went through the same process again.
However, I still didn't add the last commit that implements the changes you had requested. I'm currently in the process of doing that. What would you like me to do to fix this?

Hmm, this is strange. After git rebase you should have your branch starting from the top of the master with only your commits on it (you can verify that in any application that prints the tree of commits i.e. gitk). If you will push such a branch, GitHub should update the PR to contain only your commits and files changed by you. Right now, we have 37 commits and 57 files changed and I am even unable to verify if you merged correctly with master (if something is not missing/cut out).

Alternatively, you can backup your changes, reset hard your branch to the top of the master branch, and apply your changes again from the backup files.

git push -f

Had to force push to avoid the error message related to divergence. Did that twice and now I'm back at head. Great!
However, it seems to have been closed automatically. I'm guessing it should open again once I have a new commit in there. Sorry, not used to how pull requests work at all.

Alright, went for the least amount of changes possible. Tried as hard as possible not to touch any existing code, other than the obvious change from basic_fixed_string to basic_symbol text for symbols. Therefore, I might have added a sort of "backwards compatibility" layer in the basic_symbol_text class. If such abstractions are not needed, I can remove them.

Should I also remove operator< and operator== from basic_symbol_text? What about operator+? My thinking is that adding a basic_fixed_string to a basic_symbol_text should result in a basic_symbol_text with the basic_fixed_string added to both the standard and the ascii basic_fixed_strings in basic_symbol_text.

Should I also remove operator< and operator== from basic_symbol_text?

No, I do not think so. If the unicode symbol matches (or is less than) then the ASCII should too. So it is fine to compare unicodes here. Removing equality and comparison operators from this class will make the rest of the framework way more complicated. On the contrary, as I wrote previously you should provide the rest of operators (!=, >, <=, >= and <=>).
Regarding the operator +, I also thought about this but I really do not know. It depends on how the rest of the framework will be affected by such change. If it simplifies a lot of code then let's leave it as it is. Otherwise, we can remove. I leave it up to your discretion.

Should I also remove operator< and operator== from basic_symbol_text?

No, I do not think so. If the unicode symbol matches (or is less than) then the ASCII should too. So it is fine to compare unicodes here. Removing equality and comparison operators from this class will make the rest of the framework way more complicated. On the contrary, as I wrote previously you should provide the rest of operators (!=, >, <=, >= and <=>).

On it.

Regarding the operator +, I also thought about this but I really do not know. It depends on how the rest of the framework will be affected by such change. If it simplifies a lot of code then let's leave it as it is. Otherwise, we can remove. I leave it up to your discretion.

It seems to be simplifying a lot. My assumption is that if a basic_fixed_string is being added to a basic_symbol_text, it should already be ensured to be ASCII. Perhaps we can add a concept to enforce ASIICharT to definitely be an ASCII-compatible char type? How would we go about that? Is that even possible?

I noticed in your basic_fixed_string class that your only operator+ overload looks like this:
template<std::size_t N2>
  [[nodiscard]] constexpr friend basic_fixed_string<CharT, N + N2> operator+(
      const basic_fixed_string& lhs, const basic_fixed_string<CharT, N2>& rhs) noexcept
  {
    CharT txt[N + N2 + 1] = {};

    for (size_t i = 0; i != N; ++i) txt[i] = lhs[i];
    for (size_t i = 0; i != N2; ++i) txt[N + i] = rhs[i];

    return units::basic_fixed_string<CharT, N + N2>(txt);
  }

And this used to work fine (back when there was no basic_symbol_text class) for, say, static_assert(centimetre::symbol == "cm");.
I'm unable to have this "type promotion" (if the term is correct) work for basic_symbol_text, so I had to have several instances of each type of operator overload with arguments starting from basic_symbol_text, down to basic_fixed_string, then StandardCharT[N], finally down to StandardCharT - even though I have constructors in basic_symbol_text for all of these.

Added spaceship operator to be used under GCC 10+. However:
[[nodiscard]] constexpr friend bool operator==(const basic_symbol_text& lhs,
                                                 const basic_symbol_text& rhs) noexcept
{
  return lhs.standard_ == rhs.standard_ && lhs.ascii_ == rhs.ascii_;
}

This compares both standard and ascii  parts of basic_symbol_text.
template<typename StandardCharT2, typename ASCIICharT2, std::size_t N2, std::size_t M2>
[[nodiscard]] friend constexpr auto operator<=>(const basic_symbol_text& lhs,
const basic_symbol_text<StandardCharT2, ASCIICharT2, N2, M2>& rhs)
{
return std::lexicographical_compare_three_way(lhs.standard_.begin(), lhs.standard_.end(), rhs.standard_.begin(), rhs.standard_.end());
}
However, this compares only the standard part.
How would I go about using the three-way comparison applied to both standard and ascii parts?

Please also extend this to prefixes and replace 'micro' symbol with u in SI definitions.

Done!

Since this is compile-time code, do you think I should add comparison of the ASCII symbol too? Just to make sure.

No, I do not think so. It will only make compile-times longer and will/should not change anything.

Shouldn't an ASCII-compatible char type always be 1 byte? And if that is the case, and ASCII characters can never change in sequence, then shouldn't that type be a char anyway?

I think it is fair to assume that char will always be used for an ASCII text. We just have to remember that using char does not automatically indicate ASCII (i.e. right now UTF-8 encoding is using char until C++20 where it will be replaced with char8_t).

This compares both standard and ascii parts of basic_symbol_text.

Again, I think there should be no case where the standard part compares equal and ASCII one does not. It would be clearly a bug. So I would do the comparison just based on a standard part.  If we want to check ASCII one too I think that should be an assert comparing if the comparison returns the same result as for the standard one. Does it make sense?

Since this is compile-time code, do you think I should add comparison of the ASCII symbol too? Just to make sure.

No, I do not think so. It will only make compile-times longer and will/should not change anything.

This compares both standard and ascii parts of basic_symbol_text.
How would I go about using the three-way comparison applied to both standard and ascii parts?

Again, I think there should be no case where the standard part compares equal and ASCII one does not. It would be clearly a bug. So I would do the comparison just based on a standard part. If we want to check ASCII one too I think that should be an assert comparing if the comparison returns the same result as for the standard one. Does it make sense?

Yep, makes sense. I'll add an assert that does that.

Shouldn't an ASCII-compatible char type always be 1 byte? And if that is the case, and ASCII characters can never change in sequence, then shouldn't that type be a char anyway?

I think it is fair to assume that char will always be used for an ASCII text. We just have to remember that using char does not automatically indicate ASCII (i.e. right now UTF-8 encoding is using char until C++20 where it will be replaced with char8_t).

I guess we can partially avoid misuse of ASCIICharT by changing that to char, then.
Do you think it's a good idea to add an assert statement that ensures that the first bit of every char used in an ASCII symbol is a 0? That would ensure that can be correctly interpreted as an ASCII character, at least.

Do you think it's a good idea to add an assert statement that ensures that the first bit of every char used in an ASCII symbol is a 0?

I do not care too much. It is a QoI and for now, I prefer to scope on interfaces.

I'm unable to have this "type promotion" (if the term is correct) work for basic_symbol_text, so I had to have several instances of each type of operator overload with arguments starting from basic_symbol_text at the top, down to basic_fixed_string, then down to StandardCharT[N], and finally down to StandardCharT - even though I have constructors in basic_symbol_text for all of these.

Any help with this? Thanks!

Great work! Thank you so much!

Thank you for your utter kindness and patience! I watched your CppCon 19 presentation yesterday and although I didn't quite get everything in detail, I understood the gist of it and now further appreciate the work you've started. Hopefully when I wrap up some pending work, I'll be posting about my use case for this library in full. It makes my life a lot easier. I'll also try to assist in other features that need implementation / improvement since I am getting a more fundamental grasp of this library's design.

Please do share your use case. Ideally would be to create a new file in the example directory.
It is so awesome that you are willing to continue your contributions. Thank you!

Will do!
One question: I was just looking at your refactorization. I realized that you were able to delete all <=> overloads that use the more basic types (basic_fixed_string, StandardCharT[], StandardCharT) and keep the one that takes 2 basic_symbol_texts. How did that work?

How did that work?

I think it was possible to extensions to Class Template Argument Deduction (CTAD) introduced in C++20.

EDIT: Oh, I think I got it. You just replaced most usages of the more basic types in the comparison tests with basic_symbol_text, right?

Nope :wink: I only added basic_symbol_text to the ones that had two versions (standard and ASCII).

So if I understand this correctly, CTAD would allow StandardCharT, StandardCharT[] and basic_fixed_string to be promoted to a basic_symbol_text given we have constructors in basic_symbol_text for these?
Can there be a hierarchy? Say, if we only implemented constructors for basic_fixed_string and then left only the constructors in basic_fixed_string for CharT and CharT[]?

No. Such a hierarchy would work only in case of a direct initialization but for function arguments C++ uses copy initialization. You can find more on this here: https://en.cppreference.com/w/cpp/language/copy_initialization.

No. Such a hierarchy would work only in case of a direct initialization but for function arguments C++ uses copy initialization. You can find more on this here: https://en.cppreference.com/w/cpp/language/copy_initialization.

Thanks for the link! I'll read up on this carefully.


C#: Boolean control flow graph splitting

Summary
This PR adds CFG splitting for boolean local scope variables. For example, the control flow graph for
    void IncrOrDecr(bool inc, ref int x)
    {
        if (inc)
            x++;
        if (!inc)
            x--;
    }

is now

Note how the nodes after the first inc condition are split; [inc (line 3): true] for successors of the then branch, and [inc (line 3): false] for successors of the else branch.
Implementation details
Boolean CFG splitting builds on top of the existing generic framework for CFG splitting introduced on https://github.com/Semmle/ql/pull/76.
In order to reason about Boolean local scope variables, we need SSA, which in turn needs basic blocks, which in turn needs a CFG. Making the whole construction recursive is not possible due to negative recursion, therefore b8caa11 first introduces "pre basic blocks", and a48d77f introduces a "pre SSA" library.
d0f63ca introduces "split kinds", which is a categorization of splits, and the logic for mapping splits to integers has been moved to SplitKind. This commit also makes other changes in preparation for Boolean splits, for example categorizing split kinds into those that always apply (this was previously the case for all split kinds, i.e., finally/exception handler splits), and those that only apply sometimes.
The final commit e8cd993 introduces Boolean splitting. This means introducing BooleanSplit as a subclass of Split, and in preparation for other kinds of Boolean splits, an abstract BooleanSplitSubKind is introduced as well (currently just one sub class SsaBooleanSplitSubKind).
Notes to the reviewer
I strongly recommend reviewing each commit in turn.
Future work
We now have the building blocks to also do other kinds of Boolean splitting, for example in
int M(string s)
{
    int ret;
    if (string.isNullOrEmpty(s))
        ret = 0;
    if (s != null)
        ret = s.Length;
    return ret;
}

the branch taken in the first condition uniquely determines the branch in the second condition.
Adding splitting for a case like the above means adding another sub class to BooleanSplitSubKind.

Can we get some timing information before & after this PR?

We should write some release notes for this - unless they are planned for a follow-up PR. In particular, we might get some more results on dead store of local for example.


chore: add version.txt to .gitattributes for style

🧹  The Knative style check uses linguist to determine if a given file is a generated file. If so, it excludes that file from the check. This change should prevent Knative's style check from complaining about no newline on version.txt
Signed-off-by: Lance Ball<EMAIL_ADDRESS>/kind chore

@lance while at it would you mind also adding zz_filesystem_generated.go as generated there?

/hold for ci
/lgtm

/unhold


Tutorial for parsers

I try to make custom providers but i dont have a clue about parsers. Can someone help or make tutorial?

Ping @elgatito

What parser are you trying to create? A plugin similar to burst? Or do you want to simply add a new website to the scrapers list?

Im trying to make finvip.org private tracker. I newd to know how i read those parsers and what softwares i need for that.

see this commit for an example of how to add a private tracker. Furthermore, see ehp.py for possible method calls for the parser object.

@Jezze83 you can create a an issue, requesting addition of new trackers.
There is no documentation for ehp, but it's pretty logical if you look over other providers' definitions.


Crashes with react-native 0.66.1

I installed exponea 0.5.2 and used code from docs example
export const configureExponea = async (configuration: Configuration = defaultConfiguration) => {
  try {
    if (!(await Exponea.isConfigured())) {
      return await Exponea.configure(configuration);
    } else {
      console.log('Exponea SDK already configured.');
    }
  } catch (error) {
    console.log(error);
  }
};

When i starting the app and trying to configure exponea, it crashes with no error logs in metro.
There are logs from adb
10-26 15:31:26.896  6581  6650 E FlushManagerImpl: java.io.IOException: canceled due to java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)V in class Lokhttp3/internal/platform/Platform; or its super classes (declaration of 'okhttp3.internal.platform.Platform' appears in /data/app/~~bl8ShJkgwpIjlGv1ZINdbw==/com.microcreditselection-g8NS5YTbiECZ-c-37tkVjQ==/base.apk!classes6.dex)
10-26 15:31:26.896  6581  6650 E FlushManagerImpl:      Suppressed: java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)V in class Lokhttp3/internal/platform/Platform; or its super classes (declaration of 'okhttp3.internal.platform.Platform' appears in /data/app/~~bl8ShJkgwpIjlGv1ZINdbw==/com.microcreditselection-g8NS5YTbiECZ-c-37tkVjQ==/base.apk!classes6.dex)
10-26 15:31:26.904  6581  6651 E         : Fetch configuration Failed java.io.IOException: canceled due to java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)V in class Lokhttp3/internal/platform/Platform; or its super classes (declaration of 'okhttp3.internal.platform.Platform' appears in /data/app/~~bl8ShJkgwpIjlGv1ZINdbw==/com.microcreditselection-g8NS5YTbiECZ-c-37tkVjQ==/base.apk!classes6.dex)
10-26 15:31:26.904  6581  6651 E InAppMessageManagerImpl: Preloading in-app messages failed. canceled due to java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)V in class Lokhttp3/internal/platform/Platform; or its super classes (declaration of 'okhttp3.internal.platform.Platform' appears in /data/app/~~bl8ShJkgwpIjlGv1ZINdbw==/com.microcreditselection-g8NS5YTbiECZ-c-37tkVjQ==/base.apk!classes6.dex)
10-26 15:31:26.934  6581  6650 E AndroidRuntime: Process: com.microcreditselection, PID: 6581
10-26 15:31:26.934  6581  6650 E AndroidRuntime: java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)V in class Lokhttp3/internal/platform/Platform; or its super classes (declaration of 'okhttp3.internal.platform.Platform' appears in /data/app/~~bl8ShJkgwpIjlGv1ZINdbw==/com.microcreditselection-g8NS5YTbiECZ-c-37tkVjQ==/base.apk!classes6.dex)
10-26 15:31:26.938  6581  6652 E FlushManagerImpl: java.io.IOException: canceled due to java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)V in class Lokhttp3/internal/platform/Platform; or its super classes (declaration of 'okhttp3.internal.platform.Platform' appears in /data/app/~~bl8ShJkgwpIjlGv1ZINdbw==/com.microcreditselection-g8NS5YTbiECZ-c-37tkVjQ==/base.apk!classes6.dex)
10-26 15:31:26.938  6581  6652 E FlushManagerImpl:      Suppressed: java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)V in class Lokhttp3/internal/platform/Platform; or its super classes (declaration of 'okhttp3.internal.platform.Platform' appears in /data/app/~~bl8ShJkgwpIjlGv1ZINdbw==/com.microcreditselection-g8NS5YTbiECZ-c-37tkVjQ==/base.apk!classes6.dex)
10-26 15:31:26.943   517  5038 W ActivityTaskManager:   Force finishing activity com.microcreditselection/.MainActivity
10-26 15:31:26.972   517   591 W InputDispatcher: channel '2b4be81 com.microcreditselection/com.microcreditselection.MainActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
10-26 15:31:26.973   517   591 E InputDispatcher: channel '2b4be81 com.microcreditselection/com.microcreditselection.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
10-26 15:31:26.973   517   591 W InputDispatcher: channel 'e5c6b13 com.microcreditselection/com.microcreditselection.MainActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
10-26 15:31:26.973   517   591 E InputDispatcher: channel 'e5c6b13 com.microcreditselection/com.microcreditselection.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
10-26 15:31:26.992   517  1447 I ActivityManager: Process com.microcreditselection (pid 6581) has died: prcp TOP

@Resg where you able to resolve it?

I have the same error with the versions greater than 0.64.0, any plans to update to the latest version of RN?

Hi, we are currently working on a new RN SDK version, and we plan to update also react-native to the latest version as well. The rough release estimate is the end of February, but this is a priority now, and it can be ready sooner. I will post the update here, as soon as the new version is out. Thanks for your patience 🙏🏻

This error was caused by different versions of the OkHttp library used by our native Android SDK and RN SDK. The error should not occur anymore on the new RN SDK version 1.0.0. The latest version should also be compatible with Android 12, Gradle 7, and RN 0.67. Please try to use the newest version, and open a new issue if facing any problems. Thanks!


Example does not even find Camera

The example code just leaves you with "no cameras found" - even though the app has camera access.

@MapperMalte
Are you running camera plugin example and is it showing no cameras found ?
Are you experiencing this on Android or on iOS ?

@MapperMalte if you refer to the example at: https://github.com/flutter/plugins/blob/main/packages/camera/camera/example/lib/main.dart
I had the same issue because I wanted to move the contents of the example into a widget, and I messed up something. (I'm still learning flutter) Once I replaced my whole main.dart with the example (and fixed the test) the example had worked.


Send Panel XVG Amount

Describe the bug
When creating a new transaction to someone you have the card showing your current balance but that one is off.
To Reproduce
Steps to reproduce the behavior:

Create a new transaction
Add an amount to send to someone
Current balance - send amount is incorrect as fee has to be applied somewhere

Expected behavior
Should show currentBalance - (sendAmount + fee)
Screenshots
none.
Smartphone (please complete the following information):
irrelevant

Okay then it's maybe not a bug, but rather a visual improvements as it wasn't quite clear to me that the fee was already deducted from the currently available balance 🌮


type-based Log.for for nested source scoped to top level

When a log source is resolved as a nested source using Log.for(Class), the resulting source is not nested but bound to top level.
require "log"

module Bar
end

Log.for("foo").for("bar").info { "" } # INFO - foo.bar: x
Log.for("foo").for(Bar).info { "x" }  # INFO - bar: x

I'd expect the log event to be logged to foo.bar source in both cases.
If I want a log source for bar, I would use ::Log.for(Bar) directly and don't need to scope it to Log.for("foo").

My way of seeing it is that types are absolute reference.
The fact that Log.for and Log#for behaves the same way is for ergonomics for moving code around.
I think it won't play nice in nested types:
class Foo
  Log = ::Log.for(self)

  class Bar
    def log
      Log.for(self)
    end
  end
end

If we follow your suggestion, Bar#log would return foo.foo.bar as a source.

Maybe you could check if it's already nested and then don't nest it.

@bcardiff Yeah, that sounds fair. Probably fine to leave it like that.
Log.for(self) is just a shortcut anyway, so you can just use a string and it's fine.
I don't think this needs more complexity @asterite