)]}'
{
  "commit": "ebeb822453e5ba179149de250f33cd50c523a5c0",
  "tree": "3b7154043e6277b5ea45790acb74e1f3d601d967",
  "parents": [
    "8048ff7c72c1c6a80b238408414561c3683ff87c"
  ],
  "author": {
    "name": "aptenodytes-forsteri",
    "email": "92043606+aptenodytes-forsteri@users.noreply.github.com",
    "time": "Thu Aug 04 14:04:03 2022 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Aug 04 11:04:03 2022 -0700"
  },
  "message": "709/from imports (#760)\n\n* Support \"from\" imports in the python gazelle plugin.\r\n\r\nFixes #709.\r\n\r\n* Test case for pip imports using \"from foo import bar\".\r\n\r\n* Test cases for imports of the form \"from foo import bar\".\r\n\r\n* Remove unnecessary flag (replaced with continue\u0027s).\r\n\r\n* Make sure from imports work with std modules.\r\n\r\n- Add test case with `from __future__ import print_function`.\r\n\r\n* Fix indentation error.\r\n\r\n- Make sure that `from foo import bar, baz` works.\r\n- Add test case for this.\r\n\r\n* Fix error message.\r\n\r\n- Keep error the same as before.\r\n\r\nCo-authored-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dec3a16cc9c775ac2a2cb71f3c21f2b106b4d515",
      "old_mode": 33188,
      "old_path": "gazelle/parse.py",
      "new_id": "6b07c0e8f5cba7dd4ae8406f2831002a2300d325",
      "new_mode": 33188,
      "new_path": "gazelle/parse.py"
    },
    {
      "type": "modify",
      "old_id": "2a82c946e1e9dd86095e288465d108d0d82cce07",
      "old_mode": 33188,
      "old_path": "gazelle/parser.go",
      "new_id": "d287caf23393685256b05c412727b2fabc6380bb",
      "new_mode": 33188,
      "new_path": "gazelle/parser.go"
    },
    {
      "type": "modify",
      "old_id": "8f68dfd0366394b590b65d091d882e7e88ab3311",
      "old_mode": 33188,
      "old_path": "gazelle/resolve.go",
      "new_id": "220876da60b4cc1d06f3fe7f83ca7fe2086aad6d",
      "new_mode": 33188,
      "new_path": "gazelle/resolve.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "93f2259140b6b48a53984516a058e5b24d71ab0e",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "93f2259140b6b48a53984516a058e5b24d71ab0e",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "161dd18e333fa4e9ce7d43cfca7e4d8d5c7ed1a8",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4959898cdd58ec9809d38ddc149a6c1208b0a636",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/WORKSPACE"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8b137891791fe96927ad78e64b0aad7bded08bdc",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/foo/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4404d304611e19d9720e50bf5db1dc93c258cb8f",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/foo/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8c4ff6a2557baf5744a6ff064e497381cce2afb8",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/foo/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fbbec0284b7ec435072825cdd20add7c9e1a4ce5",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/foo/bar/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fbbec0284b7ec435072825cdd20add7c9e1a4ce5",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/foo/bar/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2e96e096cc76305dc2ee0b37a28b6b845bdcf1d7",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/foo/bar/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a15f053fe44cdb3ce3c5cf7697d47798dbeab4b4",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/foo/bar/baz.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5f7922f40f0b5a3d20691d8615e29af2c6bb5540",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/gazelle_python.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_from_init_py/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "99b48610c258a3105df8ee09bd49bb31210997b9",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_from_init_py/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "350a327d2048efea33f180adc1d0b9168c6bcc3b",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_from_init_py/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_from_multiple/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d8219bb4d1280a0a46ca2582b0f4fe476863e7b6",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_from_multiple/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "864059b428ba70b54fc180068430bed6d0c904b6",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_from_multiple/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_file/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "662da9c9a0ece2c287b1976b2391641ca952f5e8",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_file/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d5e6b2592bf5591e14a181ad7bbf08c5975ff154",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_file/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_module/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ec6da507ddfb36cecb221f5b3e63b20b89c5ef1c",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_module/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3b04f00fed10d19c03be1ebad4be4009e988f251",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_module/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_var/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8ee527e17ad0d7df228e1a3973fcdbab6cfeab39",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_var/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "de5069d54093290176db2a430f734b4a952a2fe6",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_nested_var/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_top_level_var/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6b584d713b4c6daa52e59b78cce01f1ded079087",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_top_level_var/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "532f11a8893226a9444d4120e64ec327917209d5",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/import_top_level_var/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/std_module/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4903999afc89d6fbadeee384e0e032f245c01a5d",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/std_module/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7e6bc9dc0238845188b526b3efbee2ea7c0f5576",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/std_module/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ed97d539c095cf1413af30cc23dea272095b97dd",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/from_imports/test.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/BUILD.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "577f167143a475c28a5b4614278857d22c644a0f",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/BUILD.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c50a1ca100a1348d7323235f26f8ef1aa742af43",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "faff6af87ac0ef60c3f9dacae80ca00b08118b58",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/WORKSPACE"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6b58ff30a809f268871443af46a802fbb75aef2e",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8733018885593414692ade9527481243d69ae223",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/__main__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7875c1630b5f6feb35e71549fc3f8da45319cde2",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/bar.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "21edbc0a0d6e3abe7dc21e11c0fb870ed0ab8da6",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/gazelle_python.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ed97d539c095cf1413af30cc23dea272095b97dd",
      "new_mode": 33188,
      "new_path": "gazelle/testdata/with_third_party_requirements_from_imports/test.yaml"
    }
  ]
}
