Mercurial > hgweb.cgi > hwm
changeset 28:13f4dad3c9ad
Ability to select what groups to place in the ignore file. IN: -
author | John Schneiderman <JohnMS@CodeGNU.com> |
---|---|
date | Wed, 06 Aug 2014 19:23:37 -0500 |
parents | 1b4a20ee4b42 |
children | 98f5ce7e8326 |
files | INSTALL doc/ChangeLog doc/TODO setup.cfg setup.py src/hwm.py src/ignorepo.py src/manager.py |
diffstat | 7 files changed, 52 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/INSTALL Thu Jul 31 20:51:22 2014 -0500 +++ b/INSTALL Wed Aug 06 19:23:37 2014 -0500 @@ -24,8 +24,8 @@ How To compile the programme ============================ -1) python setup.py build -2) python setup.py install +1) setup.py build +2) setup.py install Known Issues ============
--- a/doc/ChangeLog Thu Jul 31 20:51:22 2014 -0500 +++ b/doc/ChangeLog Wed Aug 06 19:23:37 2014 -0500 @@ -21,6 +21,7 @@ - Unregistering repositories will now only do so on an exact match of the storage name. - Generate default ignore file when creating a new managed repository. +- Write an ignore file to an existing managed repository. 2014-07-29 John Schneiderman <Licensing _AT_ CodeGNU _DOT_ com> 0.2.1 - Fixed issue where the configuration file copy started before it closed. - Fixed issue in Windows locking temporary file and preventing copying.
--- a/doc/TODO Thu Jul 31 20:51:22 2014 -0500 +++ b/doc/TODO Wed Aug 06 19:23:37 2014 -0500 @@ -27,7 +27,6 @@ *** *** *** Feature Goals *** *** *** -- Allow selection of multiple ignore groups during creation. - Allow plug-ins addition and removal from repositories. - Installation tutorial. - User tutorials.
--- a/setup.cfg Thu Jul 31 20:51:22 2014 -0500 +++ b/setup.cfg Wed Aug 06 19:23:37 2014 -0500 @@ -1,4 +1,3 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- #******************************************************************************* #** This file is part of HgWeb Manager. ***
--- a/src/hwm.py Thu Jul 31 20:51:22 2014 -0500 +++ b/src/hwm.py Wed Aug 06 19:23:37 2014 -0500 @@ -92,12 +92,16 @@ parser.add_argument("-d", "--description", action="store", nargs='?', default=None, help='The description of the repository.') parser.add_argument("-c", "--contact", action="store", nargs='?', default=None, help='The contact point of a repository.') parser.add_argument("-r", "--rename", action="store", nargs='?', default=None, help='The new storage-name for a repository.') + parser.add_argument("-i", "--ignore", action="store", nargs='+', default=None, help='The groups to place in an ignore file.') args = parser.parse_args() repo = __extract_values(args) - if 'create' == args.action[0]: - if manager.create(repo): + if args.ignore: + ignores = args.ignore + else: + ignores = ['Common'] + if manager.create(repo, ignores): exit(0) else: exit(2) @@ -105,7 +109,7 @@ currentStorageName = repo.StorageName if args.rename: repo.StorageName = args.rename - if manager.modify(repo, currentStorageName): + if manager.modify(repo, currentStorageName, args.ignore): exit(0) else: exit(2)
--- a/src/ignorepo.py Thu Jul 31 20:51:22 2014 -0500 +++ b/src/ignorepo.py Wed Aug 06 19:23:37 2014 -0500 @@ -32,7 +32,7 @@ """ Provides the mapping between an enumerated filter type and the Mercurial ignore section header. If an invalid argument is supplied, an empty string is given. - + @param[in] filltertype Is the enumerated value to map. @return The string value of the supplied enumerated value.
--- a/src/manager.py Thu Jul 31 20:51:22 2014 -0500 +++ b/src/manager.py Wed Aug 06 19:23:37 2014 -0500 @@ -25,12 +25,13 @@ from hwm import settings -def create(repository): +def create(repository, ignoreGroup): """ Creates a new repository under HgWeb. @pre The repository to create cannot already exist. @param[in] repository The targeted repository to create. + @param[in] ignoreGroup The list of all ignore groups to add. @post The file system now contains a new directory in the repository path that is the newly generated repository. The new repository is registered @@ -50,7 +51,7 @@ # Create the requested repository. if __addRepository(repository): print "Initialised repository directory." - if not create_ignores(repository): + if not __create_ignores(repository, ignoreGroup): return False else: print >>sys.stderr, "Failed to create repository directory." @@ -100,7 +101,7 @@ print >>sys.stderr, "Failed to register repository." return False -def modify(newRepository, currentStorageName): +def modify(newRepository, currentStorageName, ignoreGroup): """ Changes an existing repository in HgWeb. @pre The repository to modify must already exist. @@ -109,6 +110,7 @@ modify. @param[in] currentStorageName The current storage name of the repository to modify. + @param[in] ignoreGroup The list of all ignore groups to add. @post The repository is changed with the requested modifications. @@ -152,6 +154,14 @@ print >>sys.stderr, "Failed to roll back action." return False + # Update ignore file if requested. + if ignoreGroup is not None: + if __create_ignores(newRepository, ignoreGroup): + print "Successfully modified ignore file." + else: + print >>sys.stderr, "Failed to modify ignore file." + return False + # Add the new repository to the web registry. if __registerRepository(newRepository): print 'Repository modified.' @@ -193,14 +203,21 @@ print >>sys.stderr, "Failed to delete the repository." return False -def create_ignores(repository): + + +#--- Functions for fulfilling repository management. + + + +def __create_ignores(repo, ignoreGroup): """ Generates and commits an ignore file to an existing repository. @pre The repository to create an ignore file must already exist. The list of ignore patterns to use is expected to be in an XML file named "ignores.xml" and be in the hwm-ignore schema. - @param[in] repository The targeted repository for the ignore file. + @param[in] repo The targeted repository for the ignore file. + @param[in] ignoreGroup The list of all ignore groups to add. @post The managed repository now has an ignore file committed by the HgWeb manager. @@ -210,6 +227,7 @@ import os import ignorepo import sys + import xml # Extract Ignore Collection ignores = {} @@ -219,10 +237,18 @@ print >>sys.stderr, "Failed to extract ignores, error: %s" % e.message return False + ignoreFile = settings.RepositoryPath + os.sep + repo.StorageName + os.sep + '.hgignore' + wasCreated = not os.path.isfile(ignoreFile) + if wasCreated: + print "Creating ignore file." + else: + print "Rewriting ignore file." + # Write Ignore File - ignoreFile = settings.RepositoryPath + os.sep + repository.StorageName + os.sep + '.hgignore' with open(ignoreFile, 'w') as hgIgnore: for group,patterns in ignores.items(): + if not "All" in ignoreGroup and not group in ignoreGroup: + continue hgIgnore.write("#\n#\tIgnore Group: %s\n#" % group) # Reverse the sorting order to put the regular expressions first. patterns.sort(key = lambda p: p.Filter, reverse = True) @@ -235,25 +261,20 @@ filteringOn = pattern.Filter hgIgnore.write('\n\n') - if __addFile(repository, '.hgignore'): - print "Successfully added generated ignores." - else: - print >>sys.stderr, "Failed to add generated ignores." - return False + if wasCreated: + if __addFile(repo, '.hgignore'): + print "Successfully added generated ignores." + else: + print >>sys.stderr, "Failed to add generated ignores." + return False - if __commitChanges(repository, 'Created repository and set-up ignores.'): + if __commitChanges(repo, 'Created generated ignores filter.'): print "Successfully committed generated ignores." else: print >>sys.stderr, "Failed to commit generated ignores." return False return True - - -#--- Functions for fulfilling repository management. - - - def __commitChanges(repo, message): """ Commits all changes in a managed Mercurial repository as the HgWeb manager. @@ -276,7 +297,8 @@ except OSError as e: print >>sys.stderr, "Commit Error({0}): {1}".format(e.errno, e.strerror) return False - return (0 == statusCode) + # Zero being a successful commit and one being nothing changed. + return ((0 == statusCode) or (1 == statusCode)) def __addFile(repo, fileName): """ Marks a file as added in a managed Mercurial repository.