)]}'
{
  "commit": "dc16ae57e2e80376584bc65179eedbea88e2df6a",
  "tree": "18084426f3203e15f9f7e4815be0a49a533eaea8",
  "parents": [
    "1905d83fdd20d575c7c180088175fa1f6812ab7c"
  ],
  "author": {
    "name": "David Ostrovsky",
    "email": "david@ostrovsky.org",
    "time": "Mon Aug 03 07:59:40 2026 +0200"
  },
  "committer": {
    "name": "David Ostrovsky",
    "email": "david@ostrovsky.org",
    "time": "Tue Aug 04 08:22:05 2026 +0200"
  },
  "message": "Migrate UI to a PolyGerrit repo-command web component\n\nThe plugin UI still used the GWT-era screen API: the static\nJavaScript called self.onAction(\u0027project\u0027, \u0027parent\u0027, ...) with the\npopup action context. PolyGerrit removed onAction() long ago, so the\nplugin loaded but never showed any UI.\n\nReplace it with a Lit web component in TypeScript, built with the\nsame toolchain as the delete-project plugin: a web/ directory with a\nts_project compiled against the shared plugins tsconfig base, rolled\nup by gerrit_js_bundle into static/reparent-project.js and attached\nto the plugin jar as a resource jar. Because the bundle keeps the\nold file name, HttpModule and its JavaScriptPlugin binding are\nunchanged.\n\nThe component registers at the repo-command endpoint. It renders\nonly when the server-side UiAction is present in config.actions,\nwhich preserves the permission-based visibility of the old popup:\nthe action is exposed only to users passing the plugin\u0027s\ncanReparent() check. The dialog offers the new parent project and an\noptional commit message, and issues the same\nPUT /projects/{name}/reparent~parent request as before.\n\nChange-Id: I7d94e2c8f1b60a5372840df9ce1b7a46e8d05c31\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cddd4e89053c0a71790cd959a1be7b1442ed3956",
      "old_mode": 33188,
      "old_path": "BUILD",
      "new_id": "9c0da2cd97e4f0ad2bb09d81d2772ca573c29928",
      "new_mode": 33188,
      "new_path": "BUILD"
    },
    {
      "type": "delete",
      "old_id": "a91820fa644b991065475e825a2945b8fd3e29ea",
      "old_mode": 33188,
      "old_path": "src/main/resources/static/reparent-project.js",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a19f2da8ef33d137c826cf6f40d64f1e57bbc436",
      "new_mode": 33188,
      "new_path": "web/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c33abaaec440ea3a6f6829414fcea358cb08b3b9",
      "new_mode": 33188,
      "new_path": "web/gr-reparent-repo.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "09403561d42b6d2eaf0d4126a10b9d01564b8f13",
      "new_mode": 33188,
      "new_path": "web/gr-reparent-repo_test.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e19e1c11e1161492ecef98ed1f503581369bafec",
      "new_mode": 33188,
      "new_path": "web/plugin.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "256021325361b76f47f3e029b6bab36c3a41fe13",
      "new_mode": 33188,
      "new_path": "web/test/test-setup.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "52139827d818dda16c572ef37368b5017a7be224",
      "new_mode": 33188,
      "new_path": "web/test/test-util.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "65940e1efd515c0f8201d4edb53e38e69c49c627",
      "new_mode": 33188,
      "new_path": "web/tsconfig.json"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bd04587eaffea9be8b7a63ac3141e2a5bed24791",
      "new_mode": 33261,
      "new_path": "web/web_test_runner.sh"
    }
  ]
}
