Page MenuHomePhabricator

Fix an edge case when trying to pull duplicate refs via Doorkeeper
ClosedPublic

Authored by epriestley on Dec 5 2013, 3:36 AM.
Tags
None
Referenced Files
F15422533: D7709.id17428.diff
Sat, Mar 22, 9:11 AM
F15399644: D7709.id17412.diff
Mon, Mar 17, 6:25 AM
F15396669: D7709.id17412.diff
Sun, Mar 16, 3:46 PM
F15395666: D7709.id17428.diff
Sun, Mar 16, 8:49 AM
F15393063: D7709.diff
Sat, Mar 15, 7:22 PM
F15389637: D7709.id.diff
Sat, Mar 15, 5:31 AM
F15389307: D7709.diff
Sat, Mar 15, 5:06 AM
F15301067: D7709.diff
Wed, Mar 5, 5:23 PM
Subscribers

Details

Summary

Report from Asana. In some unclear circumstances, we my attempt to resolve duplicate refs which currently ends up hitting a duplicate key error.

Instead, reference the same external object if we happen to be handed duplicate refs.

Test Plan

Used this script to reproduce the issue. Applied the fix; issue went away:

#!/usr/bin/env php
<?php

require_once 'scripts/__init_script__.php';

$args = new PhutilArgumentParser($argv);
$args->parseStandardArguments();

$ref = id(new DoorkeeperObjectRef())
  ->setApplicationType(DoorkeeperBridgeAsana::APPTYPE_ASANA)
  ->setApplicationDomain(DoorkeeperBridgeAsana::APPDOMAIN_ASANA)
  ->setObjectType(DoorkeeperBridgeAsana::OBJTYPE_TASK)
  ->setObjectID(7253737283629); // Use a new task ID which we've never pulled.

$refs = array(clone $ref, clone $ref);

$asana_user = id(new PhabricatorPeopleQuery())
  ->setViewer(PhabricatorUser::getOmnipotentUser())
  ->withUsernames(array('asana'))
  ->executeOne();

$resolved_refs = id(new DoorkeeperImportEngine())
  ->setViewer($asana_user)
  ->setRefs($refs)
  ->execute();

Diff Detail

Lint
Lint Skipped
Unit
Tests Skipped