6
votes

Vérifiez s'il y a une nouvelle version de mon fichier local à Github, avec R

En bref: Je dois obtenir la date de la dernière modification d'un fichier hébergé sur GitHub.

Dans Long: étant donné que dans GitHub, j'ai un fichier (un espace de travail R) qui est une fois de temps à jour, je voudrais créer une fonction dans laquelle vous vérifiez si mon fichier local est plus âgé que celui du repo (Si vous êtes curieux, ma motivation est exposée à la fin de ce poste). Ceci est le fichier Je parle de.

En principe, il devrait être un peu facile, car chaque fichier a un page d'histoire est associée à celle-ci, mais ma connaissance est beaucoup trop pauvre pour savoir quoi faire avec cela. Aussi, Ce Q semble indice à une façon de faire ce que je veux utiliser PHP, mais c'est vraiment la terre incognita pour moi pour moi, donc je ne sais pas si cela pourrait aider de quelque manière que ce soit.

Donc, comme je l'ai dit dans la version courte de ce poste, je dois trouver un moyen de récupérer la date du dernier commit pour ce fichier. Je peux trouver un moyen de le comparer à la date de validation de mon fichier local après.

Merci d'avance, Juan

Motivation : Je travaille dans un cours en ligne de base de base qui utilise un système d'auto-vérification si des solutions d'exercices sont correctes (c'est-à-dire que les étudiants peuvent vérifier instantanément leurs résultats). Ce système utilise un fichier avec des fonctions et des données régulièrement mises à jour car je trouve souvent des bogues et de nouveaux problèmes. Mon objectif est donc d'avoir une fonction pour dire aux élèves s'il existe un nouveau dossier disponible. Il serait également prêt à trouver un moyen de le télécharger et de remplacer les personnes âgées, mais c'est secondaire maintenant.


0 commentaires

3 Réponses :


2
votes

Il semble que vous ayez besoin d'un clone local du repo GitHub. Oublier des spécificités linguistiques de R pour le moment (je ne sais pas R), vous pouvez obtenir la date la plus récente de plusieurs manières à travers Git Journal code>. Dans le fichier code> fichier d'aide code> ( git aidez le journal code>), sous la section Installations de l'établissement: xxx pré>

Vous pouvez récupérer l'horodatage UNIX (secondes Depuis le début du 1er janvier 1970 - très facilement comparable) de la plus récente commit de votre dossier, à partir de la racine du projet, avec la commande suivante GIT LOG CODE>: P>

git log --format=%ct -1 -- ejercicios-de-programacion/rep-3/datos


1 commentaires

Cela fonctionnerait certainement dans mon ordinateur mais pas dans d'autres (PC des étudiants), donc n'est donc pas une solution viable dans ce cas. Merci quand même.



3
votes

Le problème est de garder l'heure git du téléchargement. La solution ci-dessous définit le temps de fichier à la date de git après chaque téléchargement pour le prochain chèque.

library(RCurl)
library(rjson)
destination = "datos" # assume current directory
repo = "https://api.github.com/repos/jumanbar/Curso-R/"
path = "ejercicios-de-programacion/rep-3/datos"
myopts = curlOptions(useragent="whatever",ssl.verifypeer=FALSE)

d = fromJSON(getURL(paste0(repo,"commits?path=",path),
                useragent="whatever",ssl.verifypeer=FALSE))[[1]]
gitDate  = as.POSIXct(d$commit$author$date)
MustDownload = !file.exists(destination) |  file.info(destination)$mtime > gitDate
if (MustDownload){
  url = d$url
  commit = fromJSON(getURL(url, .opts=myopts))
  files = unlist(lapply(commit$files,"[[","filename"))
  rawfile = commit$files[[which(files==path)]]$raw_url
  download.file(rawfile,destination,quiet=TRUE)
  Sys.setFileTime(destination,gitDate)
  print("File was downloaded")
}


2 commentaires

C'est merveilleux merci! Je ne peux toujours pas avoir télécharger le fichier de r et je ne sais vraiment pas quoi faire du userAgent ou ssl.verifypeer options. Pour le premier, j'ai essayé "Mozilla / 5.0" en vain. Quand le download.file est exécuté i get "Télécharger avait l'état de sortie non zéro" à l'aide de méthode = "wget" ou "CURL" "URL" schéma non pris en charge "(traduit de l'espagnol). Quoi qu'il en soit, c'est ce que je sautais.


Essayez de mettre la chaîne de Rawfile dans le navigateur et vérifiez si vous pouvez le télécharger de cette façon lorsque vous êtes connecté à Github.



0
votes

Peut-être que vous pouvez utiliser la commande "Statut de git" (qui vous indique s'il y a de nouvelles commits) combinaison im avec des cronjobs. Mais vous avez besoin d'un clone local pour cela. Et je n'ai jamais essayé d'utiliser la sortie de la commande dans un cronjob.


1 commentaires

S'il y a de nouveaux commits dans la télécommande que vous n'avez pas récupérée, statut GIT ne vous le dira pas. Vous devez git fetch d'abord.