<?php

echo pht('Migrating Differential unsubscribed users to edges...')."\n";
$table = new DifferentialRevision();
$table->openTransaction();

// We couldn't use new LiskMigrationIterator($table) because the $unsubscribed
// property gets deleted.
$revs = queryfx_all(
  $table->establishConnection('w'),
  'SELECT id, phid, unsubscribed FROM differential_revision');

foreach ($revs as $rev) {
  echo '.';

  $unsubscribed = json_decode($rev['unsubscribed']);
  if (!$unsubscribed) {
    continue;
  }

  $editor = new PhabricatorEdgeEditor();
  foreach ($unsubscribed as $user_phid => $_) {
    $editor->addEdge(
      $rev['phid'],
      PhabricatorObjectHasUnsubscriberEdgeType::EDGECONST ,
      $user_phid);
  }
  $editor->save();
}

$table->saveTransaction();
echo pht('Done.')."\n";