def update_db(mddir, gitname, old_commit=None): # old_commit='' or None, initdb if not old_commit: _init_db(mddir, gitname) return diff = gitutil.modified_files(mddir, old_commit) def parse_path(path): fdir, fname = os.path.split(path) subdir = os.path.basename(fdir) return subdir, fname deleted_files = [parse_path(path) for status, path in diff if status == "D"] with db_session: u = model.BlogUser.get(gitname=gitname) if not u: abort(404, "bloguser gitname=%s not exists" % gitname) # delete files for subdir, fname in deleted_files: art = model.Article.get(gitname=gitname, subdir=subdir, filename=fname) if art is not None: art.delete() # update files for html, toc, meta in read_modified_articles(mddir, diff): m_tags = _get_mtags(meta) art = model.Article.get(gitname=gitname, subdir=meta["subdir"], filename=meta["filename"]) if art is not None: # modified art.set(**dict(meta, tags=m_tags, bloguser=u)) art.content.set(html=html, toc=toc) else: # add new art = model.Article(**dict(meta, tags=m_tags, gitname=gitname, bloguser=u)) cont = model.ArticleContent(article=art, html=html, toc=toc)
def test_modified_files(): host, owner, repo = gitutil.parse_giturl(REPO_URL) t_en = gitutil.modified_files(os.path.join(REPO_EN, repo), "1a1bba5d3") t_cn = gitutil.modified_files(os.path.join(REPO_CN, repo), "1a1bba5d3") assert t_cn == t_en