tests/test-fix-pickle.t
author Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
Mon, 07 Feb 2022 00:33:22 -0500
changeset 48737 a6efb9180764
parent 45390 7d24201b6447
permissions -rw-r--r--
sparse: rework debugsparse's interface hg debugsparse supports arguments like --include, similar to `hg tracked --addinclude` or `hg log --include`. But in `hg debugsparse`, the pattern is not an argument of the flag, instead the patterns are the anonymous command line arguments. Not only is this surprising, it makes it impossible to use --include and --exclude in the same invocation, or --reset --exclude. So I propose making debugsparse making --include, --exclude take an argument, and rejecting anonymous command line arguments, as well as allowing mixing several of these flags in one invocations. Differential Revision: https://phab.mercurial-scm.org/D12155

A script that implements uppercasing all letters in a file.

  $ UPPERCASEPY="$TESTTMP/uppercase.py"
  $ cat > $UPPERCASEPY <<EOF
  > import sys
  > from mercurial.utils.procutil import setbinary
  > setbinary(sys.stdin)
  > setbinary(sys.stdout)
  > sys.stdout.write(sys.stdin.read().upper())
  > EOF
  $ TESTLINES="foo\nbar\nbaz\n"
  $ printf $TESTLINES | "$PYTHON" $UPPERCASEPY
  FOO
  BAR
  BAZ

This file attempts to test our workarounds for pickle's lack of
support for short reads.

  $ cat >> $HGRCPATH <<EOF
  > [extensions]
  > fix =
  > [fix]
  > uppercase-whole-file:command="$PYTHON" $UPPERCASEPY
  > uppercase-whole-file:pattern=set:**
  > EOF

  $ hg init repo
  $ cd repo

# Create a file that's large enough that it seems to not fit in
# pickle's buffer, making it use the code path that expects our
# _blockingreader's read() method to return bytes.
  $ echo "some stuff" > file
  $ for i in $($TESTDIR/seq.py 13); do
  >   cat file file > tmp
  >   mv -f tmp file
  > done
  $ hg commit -Am "add large file"
  adding file

Check that we don't get a crash

  $ hg fix -r .
  saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-fix.hg (glob)