Skip to content
This repository has been archived by the owner on May 22, 2019. It is now read-only.

Add SnapShot Feature. #18

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions tracext/git/PyGIT.py
Original file line number Diff line number Diff line change
Expand Up @@ -869,6 +869,10 @@ def __chg_tuple():
# handle left-over chg entry
if chg:
yield __chg_tuple()

def archive(self, rev, path="", format='zip', prefix=''):
return self.repo.archive(str(rev), path, '--format=%s' % format, '--prefix=%s/' % prefix);


############################################################################
############################################################################
Expand Down
49 changes: 48 additions & 1 deletion tracext/git/git_fs.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
#
# See COPYING for distribution information

import re
from trac.core import *
from trac.util import TracError, shorten_line
from trac.util import content_disposition
from trac.util.datefmt import FixedOffset, to_timestamp, format_datetime
from trac.util.text import to_unicode
from trac.versioncontrol.api import \
Expand All @@ -15,8 +17,10 @@
from trac.versioncontrol.cache import CachedRepository, CachedChangeset
from trac.versioncontrol.web_ui import IPropertyRenderer
from trac.config import BoolOption, IntOption, PathOption, Option
from trac.web import IRequestHandler, RequestDone
from trac.web.chrome import Chrome


from genshi.builder import tag

from datetime import datetime
Expand Down Expand Up @@ -53,6 +57,10 @@ def normalize_rev(self, rev):
def get_changeset(self, rev):
return GitCachedChangeset(self, self.normalize_rev(rev), self.env)

def get_snapshot(self, rev, path, format, prefix):
return self.repos.get_snapshot(rev, path, format, prefix)



class GitCachedChangeset(CachedChangeset):
"""
Expand Down Expand Up @@ -101,7 +109,8 @@ def _parse_user_time(s):
return user, time

class GitConnector(Component):
implements(IRepositoryConnector, IWikiSyntaxProvider)
implements(IRepositoryConnector, IWikiSyntaxProvider, \
IRequestHandler)

def __init__(self):
self._version = None
Expand Down Expand Up @@ -251,6 +260,42 @@ def rlookup_uid(_):
self.log.debug("disabled CachedRepository for '%s'" % dir)

return repos
#########################
# IRequestHandler methods
def match_request(self, req):
match = re.match(r'/(snapshot)(/.*)?$', req.path_info)
return match
def process_request(self, req):
rev = req.args.get('rev')
path = req.args.get('path')
filename = req.args.get('filename')
with_rev = req.args.get('with_rev')
#TODO: load default repo if repo == None
repo = req.args.get('repo')
if not rev:
rev = 'HEAD'
if not path:
path = '/'
path = path[1:]
if with_rev and (int(with_rev) != 0 or str(with_rev).lower() == 'True'):
with_rev = True
else:
with_rev = False

if not filename:
filename = 'snapshot-%s' % str(rev)[:7]
elif with_rev:
filename += '-%s' % str(rev)[:7]

req.send_response(200)
req.send_header('Content-Type', 'application/zip')
req.send_header('Content-Disposition',
content_disposition('inline', filename + '.zip'))
content = self.env.get_repository(repo).get_snapshot(rev, path, 'zip', filename)
req.send_header("Content-Length", len(content))
req.write(content)

raise RequestDone


class CsetPropertyRenderer(Component):
Expand Down Expand Up @@ -469,6 +514,8 @@ def sync(self, rev_callback=None, clean=None):
revs = set(self.git.all_revs()) - revs
for rev in revs:
rev_callback(rev)
def get_snapshot(self, rev, path, format, prefix):
return self.git.archive(rev, path, format, prefix)

class GitNode(Node):
def __init__(self, repos, path, rev, log, ls_tree_info=None, historian=None):
Expand Down