Reputation: 41
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
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