瀏覽代碼

Do not fail the whole batch when a package is missing

Jordi Boggiano 12 年之前
父節點
當前提交
7b214d7ea6
共有 1 個文件被更改,包括 7 次插入1 次删除
  1. 7 1
      src/Packagist/WebBundle/Controller/ApiController.php

+ 7 - 1
src/Packagist/WebBundle/Controller/ApiController.php

@@ -135,16 +135,22 @@ class ApiController extends Controller
             return new JsonResponse(array('status' => 'error', 'message' => 'Invalid request format, must be a json object containing a downloads key filled with an array of name/version objects'), 200);
         }
 
+        $failed = array();
         foreach ($contents['downloads'] as $package) {
             $result = $this->getPackageAndVersionId($package['name'], $package['version']);
 
             if (!$result) {
-                return new JsonResponse(array('status' => 'error', 'message' => 'Package '.json_encode($package).' not found'), 200);
+                $failed[] = $package;
+                continue;
             }
 
             $this->trackDownload($result['id'], $result['vid'], $request->getClientIp());
         }
 
+        if ($failed) {
+            return new JsonResponse(array('status' => 'partial', 'message' => 'Packages '.json_encode($failed).' not found'), 200);
+        }
+
         return new JsonResponse(array('status' => 'success'), 201);
     }