##// END OF EJS Templates
util: extract all date-related utils in utils/dateutil module...
util: extract all date-related utils in utils/dateutil module With this commit, util.py lose 262 lines Note for extensions author, if this commit breaks your extension, you can pull the step-by-step split here to help you more easily pinpoint the renaming that broke your extension: hg pull https://bitbucket.org/octobus/mercurial-devel/ -r ac1f6453010d Differential Revision: https://phab.mercurial-scm.org/D2282

File last commit:

r36396:27ab9264 default
r36625:c6061cad default
Show More
generate-working-copy-states.py
88 lines | 3.3 KiB | text/x-python | PythonLexer
/ tests / generate-working-copy-states.py
Martin von Zweigbergk
generate-working-copy-states: accept depth arguments on command line...
r23447 # Helper script used for generating history and working copy files and content.
# The file's name corresponds to its history. The number of changesets can
# be specified on the command line. With 2 changesets, files with names like
# content1_content2_content1-untracked are generated. The first two filename
# segments describe the contents in the two changesets. The third segment
# ("content1-untracked") describes the state in the working copy, i.e.
# the file has content "content1" and is untracked (since it was previously
# tracked, it has been forgotten).
#
# This script generates the filenames and their content, but it's up to the
# caller to tell hg about the state.
#
# There are two subcommands:
# filelist <numchangesets>
# state <numchangesets> (<changeset>|wc)
#
# Typical usage:
#
# $ python $TESTDIR/generate-working-copy-states.py state 2 1
# $ hg addremove --similarity 0
# $ hg commit -m 'first'
#
# $ python $TESTDIR/generate-working-copy-states.py state 2 1
# $ hg addremove --similarity 0
# $ hg commit -m 'second'
#
# $ python $TESTDIR/generate-working-copy-states.py state 2 wc
# $ hg addremove --similarity 0
# $ hg forget *_*_*-untracked
# $ rm *_*_missing-*
Robert Stanca
py3: use print_function in generate-working-copy-states.py
r28725 from __future__ import absolute_import, print_function
Gregory Szorc
tests: use absolute_import in generate-working-copy-states.py
r27295
import os
Martin von Zweigbergk
test-revert: move embedded script to its own file...
r23195 import sys
Martin von Zweigbergk
generate-working-copy-states: generalize for depth...
r23446 # Generates pairs of (filename, contents), where 'contents' is a list
# describing the file's content at each revision (or in the working copy).
# At each revision, it is either None or the file's actual content. When not
# None, it may be either new content or the same content as an earlier
# revisions, so all of (modified,clean,added,removed) can be tested.
def generatestates(maxchangesets, parentcontents):
depth = len(parentcontents)
if depth == maxchangesets + 1:
Pulkit Goyal
py3: make sure we use bytes in generate-working-copy-states.py
r36396 for tracked in (b'untracked', b'tracked'):
filename = b"_".join([(content is None and b'missing' or content)
for content in parentcontents]) + b"-" + tracked
Martin von Zweigbergk
generate-working-copy-states: generalize for depth...
r23446 yield (filename, parentcontents)
else:
Pulkit Goyal
py3: make sure we use bytes in generate-working-copy-states.py
r36396 for content in ({None, b'content' + (b"%d" % (depth + 1))} |
Martin von Zweigbergk
generate-working-copy-states: generalize for depth...
r23446 set(parentcontents)):
for combination in generatestates(maxchangesets,
parentcontents + [content]):
yield combination
Martin von Zweigbergk
test-revert: move embedded script to its own file...
r23195
Martin von Zweigbergk
generate-working-copy-states: accept depth arguments on command line...
r23447 # retrieve the command line arguments
target = sys.argv[1]
maxchangesets = int(sys.argv[2])
if target == 'state':
depth = sys.argv[3]
Martin von Zweigbergk
test-revert: move embedded script to its own file...
r23195
Martin von Zweigbergk
generate-working-copy-states: accept depth arguments on command line...
r23447 # sort to make sure we have stable output
combinations = sorted(generatestates(maxchangesets, []))
Martin von Zweigbergk
test-revert: move embedded script to its own file...
r23195
# compute file content
content = []
Martin von Zweigbergk
generate-working-copy-states: accept depth arguments on command line...
r23447 for filename, states in combinations:
Martin von Zweigbergk
test-revert: move embedded script to its own file...
r23195 if target == 'filelist':
Robert Stanca
py3: use print_function in generate-working-copy-states.py
r28725 print(filename)
Martin von Zweigbergk
generate-working-copy-states: accept depth arguments on command line...
r23447 elif target == 'state':
if depth == 'wc':
# Make sure there is content so the file gets written and can be
# tracked. It will be deleted outside of this script.
Pulkit Goyal
py3: make sure we use bytes in generate-working-copy-states.py
r36396 content.append((filename, states[maxchangesets] or b'TOBEDELETED'))
Martin von Zweigbergk
generate-working-copy-states: accept depth arguments on command line...
r23447 else:
content.append((filename, states[int(depth) - 1]))
Martin von Zweigbergk
test-revert: move embedded script to its own file...
r23195 else:
Robert Stanca
py3: use print_function in generate-working-copy-states.py
r28725 print("unknown target:", target, file=sys.stderr)
Martin von Zweigbergk
test-revert: move embedded script to its own file...
r23195 sys.exit(1)
# write actual content
for filename, data in content:
if data is not None:
Matt Harbison
generate-working-copy-states: open() in binary mode when writing content...
r23494 f = open(filename, 'wb')
Pulkit Goyal
py3: make sure we use bytes in generate-working-copy-states.py
r36396 f.write(data + b'\n')
Martin von Zweigbergk
test-revert: move embedded script to its own file...
r23195 f.close()
elif os.path.exists(filename):
os.remove(filename)