From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ronnie Sahlberg Subject: [PATCH v11 05/41] refs.c: add a strbuf argument to ref_transaction_commit for error logging Date: Tue, 27 May 2014 13:25:24 -0700 Message-ID: <1401222360-21175-6-git-send-email-sahlberg@google.com> References: <1401222360-21175-1-git-send-email-sahlberg@google.com> Cc: mhagger@alum.mit.edu, Ronnie Sahlberg To: git@vger.kernel.org X-From: git-owner@vger.kernel.org Tue May 27 22:28:28 2014 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1WpNz0-0005XW-Rn for gcvg-git-2@plane.gmane.org; Tue, 27 May 2014 22:28:27 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753674AbaE0U2O (ORCPT ); Tue, 27 May 2014 16:28:14 -0400 Received: from mail-pa0-f74.google.com ([209.85.220.74]:60174 "EHLO mail-pa0-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752544AbaE0U0E (ORCPT ); Tue, 27 May 2014 16:26:04 -0400 Received: by mail-pa0-f74.google.com with SMTP id rd3so1508964pab.5 for ; Tue, 27 May 2014 13:26:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=eNre+NDZYT82hp9yn5XkflGQp0LfrV7NS92Mm107yQ4=; b=fUm64cf6EpYksaGdXV81GpTOk0/2i+CZxxW4cidM2MWz4uW045kChDcCN2rCTzRgv8 nD4fAkgWJ3zPbGGjrLikkbzQpLwxAAbz8jJGDy8JpPIOr1d9nN2atSZQudfDAKWhE2Oe s76rLCz7JOvTxlK9GtZEvllbD9Q1sqdbzYxDrafc/8p80AsHKNb29+Kg1ttPbuCi+Bhu Z14iZ8VM8VjEP0mJRd4ouD1AkX+cxkoah8DsoMWkKE/nxmr0yZ27S5sy+R1htP7cC/at wI078D0FjJFZIDTbqgzhf+5+9on32pVS4NOMAh4T/AEnH1e/Ll6Ipr3xCWE4VqxXtnZU OwVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=eNre+NDZYT82hp9yn5XkflGQp0LfrV7NS92Mm107yQ4=; b=GW7T8UvHTztspS41kVE1XWBSsWA5QZ6X4nFuv9AwjsMBCjeH6vy7mpUxoz+TGZpYGU mPOF27YjN2N/XZDIDWkCJM2t9XYhxl5sL02q/0l/hUOz1XGSJTaP6CYkiQJY1yygpaQA 8hELUr8UPurKTujlyzBS1QGzWGyEZsAab1QF2sH2ppCIXomk7Yx8Sp27HCUrV33BhsxR bpw0hruWL4R3ogMQ1aGjwZu1ap0rhhxHXLxQGOXpfAKraIWQwRo/H7TU8R6ea8IaI8tz ZuBjjBHtywD/qf0h6TB18lQRgFzqLjcr9nOqYhHlRc9cgLxQfZc8qotESTIx9tAgZvJu NLaA== X-Gm-Message-State: ALoCoQmtwM7ZpbQv8x3VRq50nOxFSfOtF3fVMnHeKE7GfbIohm+nQi6Ouly1p/KqzoMXlMIZRMHt X-Received: by 10.66.164.167 with SMTP id yr7mr2097547pab.15.1401222364196; Tue, 27 May 2014 13:26:04 -0700 (PDT) Received: from corp2gmr1-2.hot.corp.google.com (corp2gmr1-2.hot.corp.google.com [172.24.189.93]) by gmr-mx.google.com with ESMTPS id c50si1573750yhl.7.2014.05.27.13.26.04 for (version=TLSv1.1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 27 May 2014 13:26:04 -0700 (PDT) Received: from sahlberg1.mtv.corp.google.com (sahlberg1.mtv.corp.google.com [172.27.69.52]) by corp2gmr1-2.hot.corp.google.com (Postfix) with ESMTP id 0921F2F4AB9; Tue, 27 May 2014 13:26:04 -0700 (PDT) Received: by sahlberg1.mtv.corp.google.com (Postfix, from userid 177442) id A3AB1E1565; Tue, 27 May 2014 13:26:03 -0700 (PDT) X-Mailer: git-send-email 2.0.0.rc3.474.g0203784 In-Reply-To: <1401222360-21175-1-git-send-email-sahlberg@google.com> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: Add a strbuf argument to _commit so that we can pass an error string back to the caller. So that we can do error logging from the caller instead of from _commit. Longer term plan is to first convert all callers to use onerr==QUIET_ON_ERR and craft any log messages from the callers themselves and finally remove the onerr argument completely. Reviewed-by: Jonathan Nieder Signed-off-by: Ronnie Sahlberg --- builtin/update-ref.c | 2 +- refs.c | 6 +++++- refs.h | 5 ++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/builtin/update-ref.c b/builtin/update-ref.c index 1fd7a89..22617af 100644 --- a/builtin/update-ref.c +++ b/builtin/update-ref.c @@ -367,7 +367,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix) if (end_null) line_termination = '\0'; update_refs_stdin(); - ret = ref_transaction_commit(transaction, msg, + ret = ref_transaction_commit(transaction, msg, NULL, UPDATE_REFS_DIE_ON_ERR); ref_transaction_free(transaction); return ret; diff --git a/refs.c b/refs.c index 0faed29..25c3a93 100644 --- a/refs.c +++ b/refs.c @@ -3418,7 +3418,8 @@ static int ref_update_reject_duplicates(struct ref_update **updates, int n, } int ref_transaction_commit(struct ref_transaction *transaction, - const char *msg, enum action_on_err onerr) + const char *msg, struct strbuf *err, + enum action_on_err onerr) { int ret = 0, delnum = 0, i; const char **delnames; @@ -3447,6 +3448,9 @@ int ref_transaction_commit(struct ref_transaction *transaction, update->flags, &update->type, onerr); if (!update->lock) { + if (err) + strbuf_addf(err, "Cannot lock the ref '%s'.", + update->refname); ret = 1; goto cleanup; } diff --git a/refs.h b/refs.h index b893838..94d4cd4 100644 --- a/refs.h +++ b/refs.h @@ -266,9 +266,12 @@ void ref_transaction_delete(struct ref_transaction *transaction, * Commit all of the changes that have been queued in transaction, as * atomically as possible. Return a nonzero value if there is a * problem. + * If err is non-NULL we will add an error string to it to explain why + * the transaction failed. The string does not end in newline. */ int ref_transaction_commit(struct ref_transaction *transaction, - const char *msg, enum action_on_err onerr); + const char *msg, struct strbuf *err, + enum action_on_err onerr); /* * Free an existing transaction and all associated data. -- 2.0.0.rc3.474.g0203784