/**
  * Execute the console command.
  *
  * @return mixed
  * @throws \Gitonomy\Git\Exception\RuntimeException
  * @throws \Gitonomy\Git\Exception\InvalidArgumentException
  */
 public function handle()
 {
     $inspector = new Inspector($this->settings);
     $repository = $inspector->getRepositoryByUrl($this->argument('repositoryUrl'));
     $inspectedRepository = $inspector->inspectRepository($repository);
     $header = array_keys((array) $inspectedRepository[key($inspectedRepository)]);
     if (!$this->option('dry-run')) {
         $remote = $inspectedRepository['remote'];
         \Swis\GotLaravel\Models\Results::unguard();
         foreach ($inspectedRepository['results'] as $result) {
             $insert = $result->toArray();
             $insert['remote'] = $remote;
             $insert['author_slug'] = Str::slug($result->getAuthor());
             $insert['created_at'] = Carbon::createFromTimestamp($insert['date']);
             try {
                 \Swis\GotLaravel\Models\Results::updateOrCreate(array_only($insert, ['remote', 'filename', 'line']), $insert);
             } catch (\Exception $e) {
                 $this->error('Couldnt insert: ' . $e->getMessage() . PHP_EOL . print_r($insert, 1));
             }
         }
     }
     reset($inspectedRepository['results']);
     array_walk($inspectedRepository['results'], function (&$row) {
         $row = $row->toArray();
     });
     $this->info($inspectedRepository['remote']);
     $this->table($header, $inspectedRepository['results']);
     Artisan::call('got:normalize-names');
 }
 public function getByUser($slug, $monthsBack = false, $fromMonthsBack = false)
 {
     $query = Results::whereAuthorSlug($slug)->orderBy('created_at', 'DESC');
     if ($monthsBack !== false) {
         if ((int) $monthsBack === 0) {
             $query->whereRaw('YEAR(NOW()) = YEAR(created_at) AND MONTH(NOW()) = MONTH(created_at)');
         } else {
             $query->whereRaw('YEAR(DATE_SUB(NOW(), INTERVAL ' . (int) $monthsBack . ' MONTH)) = YEAR(created_at) 
                 AND MONTH(DATE_SUB(NOW(), INTERVAL ' . (int) $monthsBack . ' MONTH)) = MONTH(created_at)');
         }
     }
     if ($fromMonthsBack !== false) {
         $query->whereRaw('DATE_SUB(NOW(), INTERVAL ' . (int) $fromMonthsBack . ' MONTH) < created_at');
     }
     $this->excludedFiles($query);
     return $query->get();
 }
 /**
  * Execute the console command.
  *
  * @param Settings $settings
  * @return mixed
  */
 public function handle()
 {
     $client = new \Github\Client();
     if ($this->cache && config('game-of-tests.cache') && class_exists(CacheItemPool::class)) {
         $client->addCache(new CacheItemPool($this->cache));
     }
     $this->info('Getting repository list');
     if ($this->argument('organisation') !== false) {
         $repositories = $client->organization()->repositories($this->argument('organisation'), 'owner');
     }
     $repositoryUrls = array_pluck($repositories, 'clone_url');
     $this->info('Found ' . count($repositoryUrls) . ' repositories on Github');
     $progresbar = $this->output->createProgressBar(count($repositoryUrls));
     $progresbar->setFormat(' %current%/%max% [%bar%] %percent:3s%% %message% ');
     $progresbar->setMessage('Searching...');
     \Swis\GotLaravel\Models\Results::unguard();
     $inspector = new Inspector($this->settings);
     foreach ($repositoryUrls as $gitUrl) {
         $repository = $inspector->getRepositoryByUrl($gitUrl);
         // Check modified date
         if (null !== $this->option('modified')) {
             $modifiedTimestamp = strtotime($this->option('modified'));
             /**
              * @var $date \DateTime
              */
             try {
                 $commitDate = $repository->getHeadCommit()->getCommitterDate();
             } catch (\Gitonomy\Git\Exception\ReferenceNotFoundException $e) {
                 $this->error($e->getMessage());
                 $this->error('Error finding reference for ' . $gitUrl);
             }
             if ($modifiedTimestamp === false || $commitDate->getTimestamp() < $modifiedTimestamp) {
                 $progresbar->advance();
                 continue;
             }
         }
         $repository->setLogger(new ConsoleLogger($this->getOutput()));
         $resultSet = $inspector->inspectRepository($repository);
         $remote = $resultSet['remote'];
         if (count($resultSet['results']) > 0) {
             $progresbar->setMessage('Found ' . count($resultSet['results']) . ' tests for ' . $remote);
         }
         if (!$this->option('dry-run')) {
             foreach ($resultSet['results'] as $result) {
                 $insert = $result->toArray();
                 $insert['remote'] = $remote;
                 $insert['author_slug'] = Str::slug($result->getAuthor());
                 $insert['created_at'] = Carbon::createFromTimestamp($insert['date']);
                 try {
                     \Swis\GotLaravel\Models\Results::updateOrCreate(array_only($insert, ['remote', 'filename', 'line']), $insert);
                 } catch (\Exception $e) {
                     $this->error('Couldnt insert: ' . $e->getMessage() . PHP_EOL . print_r($insert, 1));
                 }
             }
         }
         $progresbar->advance();
     }
     Artisan::call('got:normalize-names');
 }
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     $this->info('Getting directory list');
     // Bare respoitories
     $directory = rtrim(trim($this->argument('directory')), '/') . '/';
     $scanned_directory = array_diff(scandir($directory), array('..', '.'));
     $this->info('Found ' . count($scanned_directory) . ' directories');
     $progresbar = $this->output->createProgressBar(count($scanned_directory));
     $progresbar->setFormat(' %current%/%max% [%bar%] %percent:3s%% %message% ');
     $progresbar->setMessage('Searching...');
     \Swis\GotLaravel\Models\Results::unguard();
     $inspector = new Inspector($this->settings);
     foreach ($scanned_directory as $path) {
         $this->logVerbose('Inpecting: ' . $path);
         if (null !== $this->option('only') && strcmp($path, $this->option('only')) !== 0) {
             $progresbar->advance();
             continue;
         }
         if (null !== $this->option('skippast') && strcmp($path, $this->option('skippast')) <= 0) {
             $progresbar->advance();
             continue;
         }
         $repository = $inspector->getRepositoryByPath($directory . $path);
         // Check modified date
         if (null !== $this->option('modified')) {
             $modifiedTimestamp = strtotime($this->option('modified'));
             /**
              * @var $date \DateTime
              */
             try {
                 $this->logVerbose('Getting commit date');
                 $commitDate = $repository->getHeadCommit()->getCommitterDate();
             } catch (\Gitonomy\Git\Exception\ReferenceNotFoundException $e) {
                 $this->error($e->getMessage());
                 $this->error('Error finding reference for ' . $path);
             }
             if ($modifiedTimestamp === false || $commitDate->getTimestamp() < $modifiedTimestamp) {
                 $progresbar->advance();
                 continue;
             }
             $this->logVerbose('Don\'t skip');
         }
         $repository->setLogger(new ConsoleLogger($this->getOutput()));
         $this->logVerbose('Searching git');
         $resultSet = $inspector->inspectRepository($repository);
         $remote = $resultSet['remote'];
         $this->logVerbose('Found remote ' . $remote);
         if (count($resultSet['results']) > 0) {
             $progresbar->setMessage('Found ' . count($resultSet['results']) . ' tests for ' . $remote);
         }
         if (!$this->option('dry-run')) {
             foreach ($resultSet['results'] as $result) {
                 $insert = $result->toArray();
                 $insert['remote'] = $remote;
                 $insert['author_slug'] = Str::slug($result->getAuthor());
                 $insert['created_at'] = Carbon::createFromTimestamp($result->getDate());
                 try {
                     \Swis\GotLaravel\Models\Results::updateOrCreate(array_only($insert, ['remote', 'filename', 'line']), $insert);
                 } catch (\Exception $e) {
                     $this->error('Couldnt insert: ' . $e->getMessage() . PHP_EOL . print_r($insert, 1));
                 }
             }
         }
         $progresbar->advance();
     }
     Artisan::call('got:normalize-names');
 }