user2981765
user2981765

Reputation: 41

how get the number of lines by languages in a github repository?

how get the number of lines by languages in a github repository using javascript?

i want to get something like this

[
{ "extension": "java","lines": 360},
{"extension": "xml","lines": 45},
…
]

i try this

function getSloc(repo, tries) {

    //repo is the repo's path
    if (!repo) {
        return Promise.reject(new Error("No repo provided"));
    }

    //GitHub's API may return an empty object the first time it is accessed
    //We can try several times then stop
    if (tries === 0) {
        return Promise.reject(new Error("Too many tries"));
    }

    let url = "https://api.github.com/repos" + repo + "/stats/code_frequency";

    return fetch(url)
        .then(x => x.json())
        .then(x => x.reduce((total, changes) => total + changes[1] + changes[2], 0))
        .catch(err => getSloc(repo, tries - 1));
}

Upvotes: 1

Views: 406

Answers (1)

user2981765
user2981765

Reputation: 41

if you send one file you can count it

    public static async Task Execute(string repositoryOwner, string repoName, GitHubClient gitHubClient,
        List<ExtractedFile> files,
        IEnumerable<ExtractedFile> extractedSource)
    {
        foreach (var file in extractedSource)
        {
            var fileContent = await gitHubClient.Repository.Content.GetAllContents(repositoryOwner, repoName, file.Path);
            var content = fileContent.FirstOrDefault()?.Content;

            if (content != null)
            {
                var numberLines = content.Split('\n').Length;
                file.Lines = numberLines;
                files.Add(file);
            }
        }
    }

to preocces files extrated

    public List<ProcessedFile> Execute(List<ExtractedFile> extractedFiles)
    {
        GetFileExtension(extractedFiles);
        var oto = extractedFiles.GroupBy(x => x.Extension).Select(group => new ProcessedFile
        {
            Extension = group.Key,
            Count = group.Count(),
            Lines = group.Sum(x => x.Lines),
            Bytes = group.Sum(x => x.Size)
        });

        var processedFiles = oto as ProcessedFile[] ?? oto.ToArray();

        return processedFiles.ToList();
    }

    private void GetFileExtension(List<ExtractedFile> extractedFiles)
    {
        foreach (var file in extractedFiles)
        {
            var extension = file.Name.Split('.');
            file.Extension = extension.LastOrDefault();
        }
    }

Upvotes: 2

Related Questions