private static async Task CommitBatch(DateTime cursorTime)
            {
                await _context.SaveChangesAsync();

                await _cursor.WriteCursor(cursorTime);

                Console.Write("+");
            }
            public static async Task Run(string connectionString, Uri serviceDiscoveryUri, DateTime lastCreateTime)
            {
                try
                {
                    await Initialize(connectionString, serviceDiscoveryUri);

                    // Get start time from cursor.
                    var startTime = _cursor.GetCursorTime();

                    Log.LogMessage($"Start time: {startTime.ToString("u")}");

                    var packagesRepository = new EntityRepository <Package>(_context);

                    var allPackages = packagesRepository.GetAll().Where(
                        p => p.Created <lastCreateTime &&
                                        p.Created> startTime &&
                        (p.PackageStatusKey == PackageStatus.Available || p.PackageStatusKey == PackageStatus.Validating));
                    allPackages = allPackages.Include(p => p.PackageRegistration).OrderBy(p => p.Key);

                    int counter = 0;

                    foreach (var package in allPackages)
                    {
                        var packageId = package.PackageRegistration.Id;
                        var version   = package.NormalizedVersion;

                        try
                        {
                            var repositoryMetadata = await GetRepositoryMetadata(packageId, version);

                            if (!string.IsNullOrEmpty(repositoryMetadata.Branch) ||
                                !string.IsNullOrEmpty(repositoryMetadata.Commit) ||
                                !string.IsNullOrEmpty(repositoryMetadata.Type) ||
                                !string.IsNullOrEmpty(repositoryMetadata.Url))
                            {
                                Log.LogMessage($"Found repo information for package {packageId} {version}");
                                await WriteMetadata(new RepositoryMetadataLog(repositoryMetadata, package.Created, packageId, version));
                            }
                            else
                            {
                                Console.Write(".");
                            }
                        }
                        catch (Exception e)
                        {
                            await _log.LogError(package.PackageRegistration.Id, package.NormalizedVersion, e);
                        }

                        counter++;

                        if (counter >= SaveCounterAfter)
                        {
                            await _cursor.WriteCursor(package.Created);

                            counter = 0;
                        }
                    }
                }
                finally
                {
                    Dispose();
                }

                Console.Read();
            }