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
F13150748: D20973.id49978.diff
Sat, May 4, 5:31 PM
Unknown Object (File)
Tue, Apr 30, 11:21 PM
Unknown Object (File)
Sat, Apr 27, 10:19 AM
Unknown Object (File)
Mon, Apr 22, 10:37 PM
Unknown Object (File)
Sat, Apr 20, 4:06 AM
Unknown Object (File)
Thu, Apr 18, 8:13 AM
Unknown Object (File)
Thu, Apr 11, 7:13 AM
Unknown Object (File)
Mar 28 2024, 12:29 PM
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