• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mborne / git-manager / 23617025857

26 Mar 2026 08:42PM UTC coverage: 51.743% (-5.7%) from 57.44%
23617025857

push

github

web-flow
Merge pull request #44 from mborne/export-csv

add CSV export

0 of 37 new or added lines in 2 files covered. (0.0%)

193 of 373 relevant lines covered (51.74%)

0.52 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Export/CSV.php
1
<?php
2

3
namespace MBO\GitManager\Export;
4

5
use MBO\GitManager\Entity\Project;
6

7
class CSV
8
{
9
    /**
10
     * @param iterable<Project> $projects
11
     */
12
    public function exportProjects(iterable $projects): string
13
    {
NEW
14
        $handle = fopen('php://temp', 'r+');
×
NEW
15
        if (false === $handle) {
×
NEW
16
            throw new \RuntimeException('Unable to open temporary stream for CSV export.');
×
17
        }
18

NEW
19
        fputcsv($handle, [
×
NEW
20
            'NAME',
×
NEW
21
            'VISIBILITY',
×
NEW
22
            'ARCHIVED',
×
NEW
23
            'README',
×
NEW
24
            'LICENSE',
×
NEW
25
            'SIZE_MO',
×
NEW
26
        ]);
×
27

NEW
28
        foreach ($projects as $project) {
×
NEW
29
            fputcsv($handle, [
×
NEW
30
                $project->getFullName(),
×
NEW
31
                $project->getVisibility() ?? 'unknown',
×
NEW
32
                $project->isArchived() ? '1' : '0',
×
NEW
33
                ($project->getChecks()['readme'] ?? false) ? '1' : '0',
×
NEW
34
                $this->licenseCsvValue($project),
×
NEW
35
                $this->sizeMo($project),
×
NEW
36
            ]);
×
37
        }
38

NEW
39
        rewind($handle);
×
NEW
40
        $content = stream_get_contents($handle);
×
NEW
41
        fclose($handle);
×
NEW
42
        if (!\is_string($content)) {
×
NEW
43
            throw new \RuntimeException('Unable to read CSV stream.');
×
44
        }
45

NEW
46
        return $content;
×
47
    }
48

49
    private function licenseCsvValue(Project $project): string
50
    {
NEW
51
        $license = $project->getChecks()['license'] ?? false;
×
52

NEW
53
        return $license ? 'FOUND' : 'MISSING';
×
54
    }
55

56
    private function sizeMo(Project $project): string
57
    {
NEW
58
        $sizeBytes = $project->getMetadata()['size'] ?? 0;
×
NEW
59
        if (!is_numeric($sizeBytes)) {
×
NEW
60
            return '0.0';
×
61
        }
62

NEW
63
        return number_format(((float) $sizeBytes) / (1024 * 1024), 1, '.', '');
×
64
    }
65
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc