2010-09-02 14:42:39 +00:00
<?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "fr" xml:lang = "fr" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" / >
< meta name = "keywords" content = "nanoc, web, git" >
< link rel = "shortcut icon" type = "image/x-icon" href = "/Scratch/img/favicon.ico" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/assets/css/main.css" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/css/twilight.css" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/css/idc.css" / >
< link rel = "alternate" type = "application/rss+xml" title = "RSS" href = "http://feeds.feedburner.com/yannespositocomfr" / >
< link rel = "alternate" lang = "fr" xml:lang = "fr" title = "Utilisation de git pour calculer les mtimes" type = "text/html" hreflang = "fr" href = "/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/" / >
< link rel = "alternate" lang = "en" xml:lang = "en" title = "Use git to calculate trusted mtimes" type = "text/html" hreflang = "en" href = "/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/" / >
< script type = "text/javascript" src = "/Scratch/js/jquery-1.3.1.min.js" > < / script >
< script type = "text/javascript" src = "/Scratch/js/jquery.cookie.js" > < / script >
< script type = "text/javascript" src = "/Scratch/js/index.js" > < / script >
< title > Utilisation de git pour calculer les mtimes< / title >
< / head >
< body lang = "fr" >
< script type = "text/javascript" > / / < ! [ C D A T A [
document.write('< div id = "blackpage" > < img src = "/Scratch/img/loading.gif" alt = "Chargement en cours..." / > < / div > ');
// ]]>
< / script >
< div id = "content" >
2010-09-27 18:49:15 +00:00
< div id = "choix" >
< div class = "return" > < a href = "#entete" > ↓ Menu ↓ < / a > < / div >
< div id = "choixlang" >
< a href = "/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/" onclick = "setLanguage('en')" > in English< / a >
< / div >
< / div >
< img src = "/Scratch/img/presentation.png" alt = "Presentation drawing" / >
2010-09-02 14:42:39 +00:00
< div id = "titre" >
< h1 >
Utilisation de git pour calculer les mtimes
< / h1 >
< / div >
< div class = "flush" > < / div >
< div class = "flush" > < / div >
< div id = "afterheader" >
< div class = "corps" >
< p > Vous pouvez remarquer qu’ à la fin de chaque page je donne une date de dernière modification.
Précédemment cette date était calculée en utilisant la date du fichier.
Mais il arrive fréquemment que je fasse un < code > touch< / code > d’ un fichier pour engendrer tout le site de nouveau.
Donc la date n’ est pas nécessairement la < em > vraie< / em > de modification du contenue.< / p >
< p > J’ utilise < a href = "http://git-scm.org" > git< / a > pour < em > versionner< / em > mon site web.
Et cet outil me permet de récupérer la dernière date de < em > vraie< / em > modification d’ un fichier.
Voici comment je m’ y prend avec < a href = "http://nanoc.stoneship.org" > nanoc< / a > :< / p >
< div class = "code" > < div class = "file" > < a href = "/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/code/gitmtime.rb" > ➥ gitmtime.rb < / a > < / div > < div class = "withfile" >
< pre class = "twilight" >
< span class = "Keyword" > def< / span > < span class = "Entity" > gitmtime< / span >
filepath< span class = "Keyword" > =< / span > < span class = "Variable" > < span class = "Variable" > @< / span > item< / span > .< span class = "Entity" > path< / span > .< span class = "Entity" > sub< / span > (< span class = "String" > < span class = "String" > '< / span > /Scratch/< span class = "String" > '< / span > < / span > ,< span class = "String" > < span class = "String" > '< / span > content/html/< span class = "String" > '< / span > < / span > ).< span class = "Entity" > sub< / span > (< span class = "StringRegexp" > < span class = "StringRegexp" > /< / span > < / span > < span class = "StringRegexp" > < span class = "StringRegexpSpecial" > \/< / span > $< / span > < span class = "StringRegexp" > < span class = "StringRegexp" > /< / span > < / span > ,< span class = "String" > < span class = "String" > '< / span > < span class = "String" > '< / span > < / span > )
ext< span class = "Keyword" > =< / span > < span class = "String" > < span class = "String" > %{< / span > .< span class = "StringEmbeddedSource" > < span class = "StringEmbeddedSource" > #{< / span > < span class = "StringVariable" > < span class = "StringVariable" > @< / span > item< / span > < span class = "StringEmbeddedSource" > [< / span > < span class = "StringConstant" > < span class = "StringConstant" > :< / span > extension< / span > < span class = "StringEmbeddedSource" > ]< / span > < span class = "StringEmbeddedSource" > }< / span > < / span > < span class = "String" > }< / span > < / span >
filepath< span class = "Keyword" > < < =< / span > ext
< span class = "Keyword" > if< / span > < span class = "Keyword" > not< / span > < span class = "Support" > FileTest< / span > .< span class = "Entity" > exists?< / span > (filepath)
filepath.< span class = "Entity" > sub!< / span > (ext,< span class = "String" > < span class = "String" > %{< / span > /index< span class = "StringEmbeddedSource" > < span class = "StringEmbeddedSource" > #{< / span > ext< span class = "StringEmbeddedSource" > }< / span > < / span > < span class = "String" > }< / span > < / span > )
< span class = "Keyword" > end< / span >
str< span class = "Keyword" > =< / span > < span class = "String" > < span class = "String" > `< / span > git log -1 --format='%ci' -- < span class = "StringEmbeddedSource" > < span class = "StringEmbeddedSource" > #{< / span > filepath< span class = "StringEmbeddedSource" > }< / span > < / span > < span class = "String" > `< / span > < / span >
2010-09-02 14:51:37 +00:00
< span class = "Keyword" > if< / span > str.< span class = "Entity" > nil?< / span > < span class = "Keyword" > or< / span > str.< span class = "Entity" > empty?< / span >
< span class = "Keyword" > return< / span > < span class = "Support" > Time< / span > .< span class = "Entity" > now< / span >
2010-09-02 14:42:39 +00:00
< span class = "Keyword" > else< / span >
< span class = "Keyword" > return< / span > < span class = "Support" > DateTime< / span > .< span class = "Entity" > parse< / span > ( str )
< span class = "Keyword" > end< / span >
< span class = "Keyword" > end< / span >
< / pre >
< / div > < / div >
< p > Bien entendu je sais que c’ est très lent et absolument pas optimisé.
Mais ça fonctionne comme prévu.
Maintenant la date que vous voyez en bas de la page correspond exactement à la dernière date de modification de son contenu.< / p >
2010-09-03 08:42:33 +00:00
< p > Je tiens à remercier Eric Sunshine pour ses conseils sur ce problème.< / p >
2010-09-02 14:42:39 +00:00
< / div >
< div id = "choixrss" >
< a id = "rss" href = "http://feeds.feedburner.com/yannespositocomfr" >
s'abonner
< / a >
< / div >
< script type = "text/javascript" >
$(document).ready(function(){
$('#comment').hide();
$('#clickcomment').click(showComments);
});
function showComments() {
$('#comment').show();
$('#clickcomment').fadeOut();
}
document.write('< div id = "clickcomment" > Commentaires< / div > ');
< / script >
< div class = "flush" > < / div >
< div class = "corps" id = "comment" >
< h2 class = "first" > commentaires< / h2 >
< noscript >
< / noscript >
< script type = "text/javascript" >
var idcomments_acct = 'a307f0044511ff1b5cfca573fc0a52e7';
var idcomments_post_id = '/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/';
var idcomments_post_url = 'http://yannesposito.com/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/';
< / script >
< span id = "IDCommentsPostTitle" style = "display:none" > < / span >
< script type = 'text/javascript' src = '/Scratch/js/genericCommentWrapperV2.js' > < / script >
< / div >
< div id = "entete" class = "corps_spaced" >
< div id = "liens" >
2010-09-17 15:15:29 +00:00
< ul > < li > < a href = "/Scratch/fr/" > Accueil< / a > < / li >
2010-09-02 14:42:39 +00:00
< li > < a href = "/Scratch/fr/blog/" > Blog< / a > < / li >
2010-09-30 13:01:14 +00:00
< li > < a href = "/Scratch/fr/softwares/" > Softwares< / a > < / li >
2010-09-28 01:00:51 +00:00
< li > < a href = "/Scratch/fr/about/" > À propos< / a > < / li > < / ul >
2010-09-02 14:42:39 +00:00
< / div >
< div class = "flush" > < / div >
< hr / >
< div id = "next_before_articles" >
< div id = "previous_articles" >
articles précédents
< div class = "previous_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/" > < span class = "nicer" > «< / span > base64 et sha1 sur iPhone< / a >
2010-09-02 14:42:39 +00:00
< / div >
< div class = "previous_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/" > < span class = "nicer" > «< / span > Envoyer un mail en ligne de commande avec un fichier attaché< / a >
2010-09-02 14:42:39 +00:00
< / div >
< div class = "previous_article" >
2010-09-28 15:10:12 +00:00
< a href = "/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/" > < span class = "nicer" > «< / span > Maintenant sur Heroku< / a >
2010-09-02 14:42:39 +00:00
< / div >
< / div >
< div id = "next_articles" >
articles suivants
< / div >
< div class = "flush" > < / div >
< / div >
< / div >
< div id = "bottom" >
< div >
< a rel = "license" href = "http://creativecommons.org/licenses/by-sa/3.0/deed.fr" > Droits de reproduction ©, Yann Esposito< / a >
< / div >
< div id = "lastmod" >
Écrit le : 02/09/2010
2010-09-04 08:20:28 +00:00
modifié le : 03/09/2010
2010-09-02 14:42:39 +00:00
< / div >
< div >
Site entièrement réalisé avec
< a href = "http://www.vim.org" > Vim< / a >
et
< a href = "http://nanoc.stoneship.org" > nanoc< / a >
< / div >
< div >
< a href = "/Scratch/fr/validation/" > Validation< / a >
< a href = "http://validator.w3.org/check?uri=referer" > [xhtml] < / a >
.
< a href = "http://jigsaw.w3.org/css-validator/check/referer?profile=css3" > [css] < / a >
.
< a href = "http://validator.w3.org/feed/check.cgi?url=http%3A//yannesposito.com/Scratch/fr/blog/feed/feed.xml" > [rss]< / a >
< / div >
< / div >
< div class = "clear" > < / div >
< / div >
< / body >
< / html >