示例#1
0
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)
示例#2
0
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