Skip to content
  • Michka Popoff's avatar
    bottle merge: add support for linux cellar · 95bf529a
    Michka Popoff authored
    The first attempt to build and pull a formula (hello) for linux in homebrew-core
    resulted in a wrong cellar line being added to the formula's bottle block.
    
    How to test/debug this, using the 4 bottles that where built for hello:
    brew bottle --merge --debug hello--2.10_1.mojave.bottle.json hello--2.10_1.x86_64_linux.bottle.json hello--2.10_1.big_sur.bottle.json hello--2.10_1.catalina.bottle.json
    
    This command would add create the following bottle block:
    
      bottle do
        cellar "/home/linuxbrew/.linuxbrew/Cellar"
        sha256 "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f" => :big_sur
        sha256 "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac" => :catalina
        sha256 "22948764d8f8d7be4870ff92dae64d986eb63a9150b219c20fff87d1a6aa93d6" => :mojave
        sha256 "702dc7f78444d2f4f1c19324be654bcbb8b99dd0e9ce26c3e2fbc3b6464a189f" => :x86_64_linux
      end
    
    After the change in this PR, the result is the following:
    
      bottle do
        sha256 "a0af7dcbb5c83f6f3f7ecd507c2d352c1a018f894d51ad241ce8492fa598010f" => :big_sur
        sha256 "5334dd344986e46b2aa4f0471cac7b0914bd7de7cb890a34415771788d03f2ac" => :catalina
        sha256 "22948764d8f8d7be4870ff92dae64d986eb63a9150b219c20fff87d1a6aa93d6" => :mojave
        sha256 "702dc7f78444d2f4f1c19324be654bcbb8b99dd0e9ce26c3e2fbc3b6464a189f" => :x86_64_linux
      end
    
    The brew bottle --merge code will pick the most common cellar line between the 4 bottles, by order of priority:
    - non-relocatable (fixed cellar path)
    - cellar :any
    - cellar :any_skip_relocation
    
    In the case of the hello bottle, the 3 mac bottles are "cellar :any_skip_relocation", and the linux bottle
    is non-relocatable. So the linux bottle wins and the code correctly determines that the 4 bottles should
    be non-relocatable.
    
    In that case, the /home/linuxbrew/.linuxbrew/Cellar path is defined as cellar, and by convention
    we do not write that out to the formula file, hence the cellar path check that needs to be modified
    in this PR.
    
    This PR also fixes the same situation for mac ARM cellar paths
    95bf529a