summaryrefslogtreecommitdiff
path: root/src/filters.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2010-02-05 05:35:14 -0500
committerJohn Wiegley <johnw@newartisans.com>2010-02-05 05:35:14 -0500
commit547137096051ab985dca6f8e5c7be191b62ccb0c (patch)
tree2f3a39c4b71b8cb8b232502401e8dd2c8c2247ef /src/filters.cc
parentc6873d32aa121289e87be7eb16ff531c6d468d2a (diff)
parent69da18cd303b10f9badd542141ffdfd546009508 (diff)
downloadfork-ledger-547137096051ab985dca6f8e5c7be191b62ccb0c.tar.gz
fork-ledger-547137096051ab985dca6f8e5c7be191b62ccb0c.tar.bz2
fork-ledger-547137096051ab985dca6f8e5c7be191b62ccb0c.zip
Merge branch 'next'
Diffstat (limited to 'src/filters.cc')
-rw-r--r--src/filters.cc25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/filters.cc b/src/filters.cc
index 0084fac7..2926eb08 100644
--- a/src/filters.cc
+++ b/src/filters.cc
@@ -793,12 +793,25 @@ void transfer_details::operator()(post_t& post)
break;
case SET_ACCOUNT: {
- std::list<string> account_names;
- temp.account->remove_post(&temp);
- split_string(substitute.to_string(), ':', account_names);
- temp.account = create_temp_account_from_path(account_names, temps,
- xact.journal->master);
- temp.account->add_post(&temp);
+ string account_name = substitute.to_string();
+ if (! account_name.empty() &&
+ account_name[account_name.length() - 1] != ':') {
+ account_t * prev_account = temp.account;
+ temp.account->remove_post(&temp);
+
+ account_name += ':';
+ account_name += prev_account->fullname();
+
+ std::list<string> account_names;
+ split_string(account_name, ':', account_names);
+ temp.account = create_temp_account_from_path(account_names, temps,
+ xact.journal->master);
+ temp.account->add_post(&temp);
+
+ temp.account->add_flags(prev_account->flags());
+ if (prev_account->has_xdata())
+ temp.account->xdata().add_flags(prev_account->xdata().flags());
+ }
break;
}