)]}'
{
  "commit": "da10ac49efee1b02cbfa3b22a39e68bf3fe5bbe2",
  "tree": "9e806a6cfadffa1721adbeb46b874eee6202336c",
  "parents": [
    "3f40e98d3901068aa25fa7ff2573f6bdb5b1fe81"
  ],
  "author": {
    "name": "Douglas Thor",
    "email": "dougthor42@users.noreply.github.com",
    "time": "Thu Feb 29 23:59:49 2024 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Mar 01 07:59:49 2024 +0000"
  },
  "message": "feat(gazelle): Add \"python_visibility\" directive that appends additional visibility labels (#1784)\n\nFixes #1783.\n\nAdd a new gazelle directive, `python_visibility`, that allows\nusers to add labels to the `visibility` attribute of generated targets.\nout by the way, hence this PR), I noticed that the docs were a little\nThis directive acts similar to[^1] the [`go_visibility`\ndirective](https://github.com/bazelbuild/bazel-gazelle#directives).\n\nThe primary use case is for python projects that separate unit test\nfiles from the python packages/modules that they test, like so:\n\n```\npackaging_tutorial/\n├── LICENSE\n├── pyproject.toml\n├── README.md\n├── src/\n│   └── mypackage/\n│       ├── __init__.py\n│       └── foo.py\n└── tests/\n    ├── __init__.py\n    └── test_foo.py\n```\n\nA future PR will add an example to the `./examples` directory (issue\n#1775).\n\n[^1]: At least, similar based on docs. I haven\u0027t done any actual\ncomparison.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "117aacbd1409865bbe58ed86c126420bab88ffc8",
      "old_mode": 33188,
      "old_path": "gazelle/README.md",
      "new_id": "00170345e71e2b63fbee5ba0d93fa4e74d9f1cac",
      "new_mode": 33188,
      "new_path": "gazelle/README.md"
    },
    {
      "type": "modify",
      "old_id": "69d276266e735b010f88fdc42d5b04fd2f775f5d",
      "old_mode": 33188,
      "old_path": "gazelle/python/configure.go",
      "new_id": "431568829bed79b2ba0376cb43145c190bae625b",
      "new_mode": 33188,
      "new_path": "gazelle/python/configure.go"
    },
    {
      "type": "modify",
      "old_id": "ba273be2b78e3507c36061d3971555825927a4e2",
      "old_mode": 33188,
      "old_path": "gazelle/python/generate.go",
      "new_id": "6973d2ded8c3ef098a78311f36cf6a4b13f28622",
      "new_mode": 33188,
      "new_path": "gazelle/python/generate.go"
    },
    {
      "type": "modify",
      "old_id": "e3104058b2b399952cdb27314ce45e284311f01c",
      "old_mode": 33188,
      "old_path": "gazelle/python/target.go",
      "new_id": "a941a7cc7eb51cbc2f66f27383d08a71d91c7fbf",
      "new_mode": 33188,
      "new_path": "gazelle/python/target.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c1ba9e455efd3d04d7719bd18b2e557c02fd9349",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "70715e86fa7d66454dbd038c9cdb96883e5a75c7",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "51ab7aef6b58acbffe86fa96c14f2180216fee28",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "faff6af87ac0ef60c3f9dacae80ca00b08118b58",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/WORKSPACE"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "98907eb79413d733508251762bd987313e1f0db3",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/foo.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5193e69587a50f7da087ebe5c39255ec90ffe197",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/subdir/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "722c840432e755462baad898308d5896c15fbb11",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/subdir/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/subdir/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/subdir/bar.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2410223e5999e8b2ef1720863d19e2012a0974eb",
      "new_mode": 33188,
      "new_path": "gazelle/python/testdata/directive_python_visibility/test.yaml"
    },
    {
      "type": "modify",
      "old_id": "cecf9dcea0810c2d16ad57538094af8c017127ae",
      "old_mode": 33188,
      "old_path": "gazelle/pythonconfig/pythonconfig.go",
      "new_id": "e350a7cb606273923c416dd8b89026af45dfde36",
      "new_mode": 33188,
      "new_path": "gazelle/pythonconfig/pythonconfig.go"
    }
  ]
}
