brew icon indicating copy to clipboard operation
brew copied to clipboard

After a fresh install, `brew list` shows an empty output if only cask(s) had been installed

Open maverickwoo opened this issue 2 years ago • 3 comments

brew config output

HOMEBREW_VERSION: 3.5.6
ORIGIN: https://github.com/Homebrew/brew
HEAD: 0b030b74e2ac518bd0bc4158f96c449198f9957f
Last commit: 7 days ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 48f398548302e5aef01a1202465c2831873df41d
Core tap last commit: 12 hours ago
Core tap branch: master
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 10
Homebrew Ruby: 2.6.8 => /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby
CPU: 10-core 64-bit arm_firestorm_icestorm
Clang: 13.1.6 build 1316
Git: 2.32.1 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 7.79.1 => /usr/bin/curl
macOS: 12.5-arm64
CLT: N/A
Xcode: 13.4.1
Rosetta 2: false

brew doctor output

Your system is ready to brew.

Verification

  • [X] I ran brew update and am still able to reproduce my issue.
  • [X] I have resolved all warnings from brew doctor and that did not fix my problem.

What were you trying to do (and why)?

I installed brew following the instructions in https://docs.brew.sh/Installation#untar-anywhere.

Then, without installing any formula, I installed a cask. Example: brew install --cask ghidra.

Then, I ran brew list to see what I have installed.

What happened (include all command output)?

$ brew list
$

(The output is empty.)

I have also checked that the return code in $? is 0.

What did you expect to happen?

I expect brew list to show me a casks list (in my example, it would contain ghidra).

Note that once I install the first formula, then the output of brew list will become correct and show both the formula and the cask. And even if I uninstall that formula immediately, the output of brew list will remain correct and contain an empty formulae list and a casks list of one item.

Step-by-step reproduction instructions (by running brew commands)

In a fresh brew installation:

brew install --cask ghidra
brew list

maverickwoo avatar Jul 28 '22 05:07 maverickwoo

Does this work?

# In a fresh brew installation:

brew install --cask ghidra
brew list --cask

carlocab avatar Jul 28 '22 05:07 carlocab

@carlocab To answer your question, that would still yield an empty output.

I did some more testing this morning and I think the following may be useful. The initial setup is:

----starting from a fresh installation----

$ brew install --cask ghidra
$ brew list
$ brew list --cask

The cask installation step above created a subdirectory Caskroom inside the brew prefix (but note the absence of the Cellar subdirectory at this point). Despite the cask installation was successful, the output of both brew list and brew list --cask were empty.

But if we manually create a subdirectory called Cellar inside the brew prefix, then brew list will show a list of casks:

$ mkdir `brew --prefix`/Cellar
$ brew list

==> Casks
ghidra

And if we then further create a file inside Cellar, then brew list will show a list of formulae also:

$ touch `brew --prefix`/Cellar/.keepme
$ brew list
==> Formulae

==> Casks
ghidra

So I think the problem I was running into is: the installation method in https://docs.brew.sh/Installation#untar-anywhere does not create the Cellar subdirectory inside the brew prefix, and yet the absence of this subdirectory caused a bug in brew list (and brew list --cask) to not list any casks even when there are installed casks.

maverickwoo avatar Jul 28 '22 17:07 maverickwoo

This is really just a bug in brew list. We currently return early if HOMEBREW_CELLAR doesn't exist, but this ignores the case where there are casks installed and not formulae. Instead of returning, we should continue execution and skip formula-specific things.

It looks like there's only one direct call to HOMEBREW_CELLAR later on in the file, and it already has an existence check, so I bet removing the early return would be pretty simple.

Anyone should feel free to take a stab at this, so marking as help wanted

Rylan12 avatar Aug 01 '22 00:08 Rylan12