From: Christian Couder <christian.couder@gmail.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
Ben Peart <Ben.Peart@microsoft.com>,
Jonathan Tan <jonathantanmy@google.com>,
Nguyen Thai Ngoc Duy <pclouds@gmail.com>,
Mike Hommey <mh@glandium.org>,
Lars Schneider <larsxschneider@gmail.com>,
Eric Wong <e@80x24.org>,
Christian Couder <chriscool@tuxfamily.org>
Subject: [PATCH v3 0/8] Create Git/Packet.pm
Date: Fri, 10 Nov 2017 14:21:52 +0100 [thread overview]
Message-ID: <20171110132200.7871-1-chriscool@tuxfamily.org> (raw)
Goal
~~~~
Packet related functions in Perl can be useful to write new filters or
to debug or test existing filters. They might also in the future be
used by other software using the same packet line protocol. So instead
of having them in t0021/rot13-filter.pl, let's extract them into a new
Git/Packet.pm module.
Changes since the previous version
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There are only a few small changes compared to v2:
Patch 2/8 has the following change:
- packet_required_key_val_read() is renamed packet_key_val_read()
and a comment is added before the function,
Patch 2/8 and 6/8 have the following change:
- "if" is used instead of "unless" to make the logic easier to
understand
The diff with the previous version is:
diff --git a/perl/Git/Packet.pm b/perl/Git/Packet.pm
index 255b28c098..1682403ffc 100644
--- a/perl/Git/Packet.pm
+++ b/perl/Git/Packet.pm
@@ -17,7 +17,7 @@ our @EXPORT = qw(
packet_compare_lists
packet_bin_read
packet_txt_read
- packet_required_key_val_read
+ packet_key_val_read
packet_bin_write
packet_txt_write
packet_flush
@@ -68,28 +68,29 @@ sub packet_bin_read {
sub remove_final_lf_or_die {
my $buf = shift;
- unless ( $buf =~ s/\n$// ) {
- die "A non-binary line MUST be terminated by an LF.\n"
- . "Received: '$buf'";
+ if ( $buf =~ s/\n$// ) {
+ return $buf;
}
- return $buf;
+ die "A non-binary line MUST be terminated by an LF.\n"
+ . "Received: '$buf'";
}
sub packet_txt_read {
my ( $res, $buf ) = packet_bin_read();
- unless ( $res == -1 or $buf eq '' ) {
+ if ( $res != -1 and $buf ne '' ) {
$buf = remove_final_lf_or_die($buf);
}
return ( $res, $buf );
}
-sub packet_required_key_val_read {
+# Read a text line and check that it is in the form "key=value"
+sub packet_key_val_read {
my ( $key ) = @_;
my ( $res, $buf ) = packet_txt_read();
- unless ( $res == -1 or ( $buf =~ s/^$key=// and $buf ne '' ) ) {
- die "bad $key: '$buf'";
+ if ( $res == -1 or ( $buf =~ s/^$key=// and $buf ne '' ) ) {
+ return ( $res, $buf );
}
- return ( $res, $buf );
+ die "bad $key: '$buf'";
}
sub packet_bin_write {
diff --git a/t/t0021/rot13-filter.pl b/t/t0021/rot13-filter.pl
index 6fd7fa476b..f1678851de 100644
--- a/t/t0021/rot13-filter.pl
+++ b/t/t0021/rot13-filter.pl
@@ -70,7 +70,7 @@ print $debug "init handshake complete\n";
$debug->flush();
while (1) {
- my ( $res, $command ) = packet_required_key_val_read("command");
+ my ( $res, $command ) = packet_key_val_read("command");
if ( $res == -1 ) {
print $debug "STOP\n";
exit();
@@ -106,7 +106,7 @@ while (1) {
packet_txt_write("status=success");
packet_flush();
} else {
- my ( $res, $pathname ) = packet_required_key_val_read("pathname");
+ my ( $res, $pathname ) = packet_key_val_read("pathname");
if ( $res == -1 ) {
die "unexpected EOF while expecting pathname";
}
Links
~~~~~
This patch series is on the following branch:
https://github.com/chriscool/git/commits/gl-prep-external-odb
Version 1 and 2 of this patch series are on the mailing list here:
https://public-inbox.org/git/20171019123030.17338-1-chriscool@tuxfamily.org/
https://public-inbox.org/git/20171105213836.11717-1-chriscool@tuxfamily.org/
They are also available in the following branch:
https://github.com/chriscool/git/commits/gl-prep-external-odb1
https://github.com/chriscool/git/commits/gl-prep-external-odb14
This patch series was extracted from previous "Add initial
experimental external ODB support" patch series.
Version 1, 2, 3, 4, 5 and 6 of this previous series are on the mailing
list here:
https://public-inbox.org/git/20160613085546.11784-1-chriscool@tuxfamily.org/
https://public-inbox.org/git/20160628181933.24620-1-chriscool@tuxfamily.org/
https://public-inbox.org/git/20161130210420.15982-1-chriscool@tuxfamily.org/
https://public-inbox.org/git/20170620075523.26961-1-chriscool@tuxfamily.org/
https://public-inbox.org/git/20170803091926.1755-1-chriscool@tuxfamily.org/
https://public-inbox.org/git/20170916080731.13925-1-chriscool@tuxfamily.org/
They are also available in the following branches:
https://github.com/chriscool/git/commits/gl-external-odb12
https://github.com/chriscool/git/commits/gl-external-odb22
https://github.com/chriscool/git/commits/gl-external-odb61
https://github.com/chriscool/git/commits/gl-external-odb239
https://github.com/chriscool/git/commits/gl-external-odb373
https://github.com/chriscool/git/commits/gl-external-odb411
Christian Couder (8):
t0021/rot13-filter: fix list comparison
t0021/rot13-filter: refactor packet reading functions
t0021/rot13-filter: improve 'if .. elsif .. else' style
t0021/rot13-filter: improve error message
t0021/rot13-filter: add packet_initialize()
t0021/rot13-filter: refactor checking final lf
t0021/rot13-filter: add capability functions
Add Git/Packet.pm from parts of t0021/rot13-filter.pl
perl/Git/Packet.pm | 169 ++++++++++++++++++++++++++++++++++++++++++++++++
perl/Makefile | 1 +
t/t0021/rot13-filter.pl | 127 ++++++++++--------------------------
3 files changed, 203 insertions(+), 94 deletions(-)
create mode 100644 perl/Git/Packet.pm
--
2.15.0.132.g7ad97d78be
next reply other threads:[~2017-11-10 13:22 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-10 13:21 Christian Couder [this message]
2017-11-10 13:21 ` [PATCH v3 1/8] t0021/rot13-filter: fix list comparison Christian Couder
2017-11-10 13:21 ` [PATCH v3 2/8] t0021/rot13-filter: refactor packet reading functions Christian Couder
2017-11-10 13:21 ` [PATCH v3 3/8] t0021/rot13-filter: improve 'if .. elsif .. else' style Christian Couder
2017-11-10 13:21 ` [PATCH v3 4/8] t0021/rot13-filter: improve error message Christian Couder
2017-11-10 13:21 ` [PATCH v3 5/8] t0021/rot13-filter: add packet_initialize() Christian Couder
2017-11-10 13:21 ` [PATCH v3 6/8] t0021/rot13-filter: refactor checking final lf Christian Couder
2017-11-10 13:21 ` [PATCH v3 7/8] t0021/rot13-filter: add capability functions Christian Couder
2017-11-10 13:22 ` [PATCH v3 8/8] Add Git/Packet.pm from parts of t0021/rot13-filter.pl Christian Couder
2017-11-10 19:03 ` [PATCH v3 0/8] Create Git/Packet.pm Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171110132200.7871-1-chriscool@tuxfamily.org \
--to=christian.couder@gmail.com \
--cc=Ben.Peart@microsoft.com \
--cc=chriscool@tuxfamily.org \
--cc=e@80x24.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=larsxschneider@gmail.com \
--cc=mh@glandium.org \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).