En bref: Je dois obtenir la date de la dernière modification d'un fichier hébergé sur GitHub. P>
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. P>
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. P>
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. P>
Merci d'avance, Juan p>
Motivation EM>: 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. P>
3 Réponses :
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 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 Journal code>. Dans le fichier code> fichier d'aide code> (
git aidez le journal code>), sous la section Installations de l'établissement:
GIT LOG CODE>: P>
git log --format=%ct -1 -- ejercicios-de-programacion/rep-3/datos
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.
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") }
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 code> ou
ssl.verifypeer code> options. Pour le premier, j'ai essayé "Mozilla / 5.0" en vain. Quand le
download.file code> est exécuté i get "Télécharger avait l'état de sortie non zéro" à l'aide de
méthode = "wget" code> ou
"CURL" code> "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.
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. P>
S'il y a de nouveaux commits dans la télécommande que vous n'avez pas récupérée, statut GIT code> ne vous le dira pas. Vous devez
git fetch code> d'abord.