Page MenuHomePhabricator

Fix diffusion.branchquery returning dictionary instead of array when branches are filtered out
ClosedPublic

Authored by artms on Feb 10 2020, 1:24 PM.
Tags
None
Referenced Files
F19470286: D20973.id.diff
Mon, Jan 5, 12:59 PM
F19468833: D20973.diff
Sun, Jan 4, 11:14 AM
F19303918: D20973.id49978.diff
Wed, Dec 24, 6:19 AM
F18845638: D20973.id.diff
Oct 29 2025, 1:39 PM
F18841821: D20973.diff
Oct 28 2025, 11:32 AM
F18814016: D20973.diff
Oct 20 2025, 8:48 PM
F18783887: D20973.id49978.diff
Oct 13 2025, 10:28 AM
F18765015: D20973.id49971.diff
Oct 7 2025, 9:07 AM
Subscribers

Details

Summary

diffusion.branchquery can return dictionary instead of array if some branches are filtered out.
Eg.:

{
  "result": [
    {
      "shortName": "master",
      "commitIdentifier": "2817b0d8f79748ddfad0220c46d9b20bea34f460",
      "refType": "branch",
      "rawFields": {
        "objectname": "2817b0d8f79748ddfad0220c46d9b20bea34f460",
        "objecttype": "commit",

might become:

{
  "result": {
    "1": {
      "shortName": "master",
      "commitIdentifier": "2817b0d8f79748ddfad0220c46d9b20bea34f460",
      "refType": "branch",
      "rawFields": {
        "objectname": "2817b0d8f79748ddfad0220c46d9b20bea34f460",
        "objecttype": "commit",

Reproduction - find repository which has couple of branches, setup to track only some of them, execute diffusion.branchquery API call - result is dictionary instead of array

Test Plan

Apply patch, execution diffusion.branchquery call - result is no longer dictionary if it was one before

Diff Detail

Repository
rP Phabricator
Branch
master
Lint
Lint Passed
Unit
Tests Skipped
Build Status
Buildable 23796
Build 32726: Run Core Tests
Build 32725: arc lint + arc unit

Event Timeline

artms requested review of this revision.Feb 10 2020, 1:25 PM
src/applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php
106

This essentially punches holes in array and makes out of it a dictionary with array positions becoming integer keys in dictionary.

$ php -a
Interactive shell

php > $a=array("a", "b", "c");
php > var_dump($a);
array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
}
php > unset($a[1]);
php > var_dump($a);
array(2) {
  [0]=>
  string(1) "a"
  [2]=>
  string(1) "c"
}
This revision is now accepted and ready to land.Feb 12 2020, 7:50 PM